Skip to main content
Glama

shopify-theme-mcp

An MCP server that lets Claude read and edit your Shopify theme. It wraps the Shopify CLI and a local theme directory, auto-commits every change to git, and refuses to touch your live theme unless you explicitly say so.

Runs as a local stdio server for Claude Desktop, or as a remote HTTP endpoint you can reach from claude.ai and mobile.

How it works

Claude ──stdio──> shopify-theme-mcp ──> local theme dir (git repo)
                                    └─> shopify CLI ──> Shopify Admin
  • Edits happen locally in THEME_DIR — fast, token-cheap, fully versioned.

  • Every mutation auto-commits with a [claude] prefix, so git_history + git_revert_file give you instant undo. The server runs git init itself if THEME_DIR isn't already a repo.

  • theme_pull / theme_push sync with Shopify through the CLI.

  • Live-theme protection: theme_push defaults to creating a new unpublished theme. Pushing to the published theme requires allow_live: true; publish_theme requires confirm: true.

  • Hidden content is skipped by default — see Hidden and disabled content.

Related MCP server: Shopify MCP Server

Contents


Requirements

Node.js

22.12 or newer — required by the Shopify CLI (node --version)

Shopify CLI

See Installing the Shopify CLI

Git

Preinstalled on macOS; sudo apt install git on Debian/Ubuntu

Shopify auth

A Theme Access password, or an interactive CLI login

On the Node version. This package's own engines field says Node 18+, which is true of the server itself, but the Shopify CLI it shells out to requires 22.12+. Install 22.12 or newer or theme commands will fail. nvm is the easiest way to manage this: nvm install 22 && nvm use 22.


Installing the Shopify CLI

The CLI does the actual talking to Shopify — this server wraps it. Theme commands are built into @shopify/cli; there is no separate theme package to install any more.

npm (any platform):

npm install -g @shopify/cli@latest

Homebrew (macOS):

brew tap shopify/shopify
brew install shopify-cli
yarn global add @shopify/cli@latest
# or
pnpm install -g @shopify/cli@latest

Verify the install — this must work before the MCP server will:

shopify version
which shopify     # note this path; you may need it for Claude Desktop's PATH

If shopify isn't found, your global npm bin directory isn't on your PATH. Find it with npm bin -g and add it to your shell profile.

The CLI self-upgrades from v4.0 onward. If that is a problem on a server you manage, disable it with shopify config autoupgrade off.


Getting a Theme Access token

This is the recommended way to authenticate, and the only option for headless or remote use. The token is scoped to themes only — it cannot read orders or customer data.

1. Check you have permission

  • Store owner — access is automatic.

  • Staff — you need Edit permissions (including Add and remove staff) plus Themes permissions.

  • Collaborators — you need Themes permissions under online store settings.

If you don't have these, ask the store owner to generate the password and send it to you.

2. Install the Theme Access app

Go to the Theme Access app on the Shopify App Store, click Add app, then Install app in your admin to authorise it.

3. Create a password

In the Theme Access app, click Create theme password, enter the developer's name and email address, and submit. Shopify emails that address a link to the password.

⚠️ You can only view the password once

The emailed link expires after 7 days, or immediately once the password has been viewed — whichever comes first. Copy it straight into your Claude Desktop config, systemd unit or password manager the moment you open it. If you lose it, you cannot recover it; delete the entry and create a new one.

Theme Access passwords typically begin shptka_.

4. Use it

Set it as SHOPIFY_CLI_THEME_TOKEN wherever you configure the server (Claude Desktop env block, or the systemd unit). The server passes your environment through to the Shopify CLI, so it is picked up automatically.

Test it independently of Claude first:

SHOPIFY_CLI_THEME_TOKEN=shptka_xxxx shopify theme list --store my-store

If that lists your themes, the MCP server will work.

Revoking a token

In the Theme Access app, open the Passwords page, click Delete next to the developer, and confirm. Access is revoked immediately. Do this when someone leaves, or if a token is ever exposed.

Alternative: interactive login

For local use only, you can skip the token entirely:

shopify theme list --store my-store

Complete the browser login and the CLI caches the session. This is fine on your own machine, but the session expires and cannot be used headlessly — remote mode needs a Theme Access token.


Install

git clone https://github.com/GOFORWRD/shopify-theme-mcp.git
cd shopify-theme-mcp
npm install
npm run build
mkdir -p ~/projects/my-theme   # local theme directory

THEME_DIR does not need to be a git repo or contain anything — the server initialises git on first use and theme_pull will populate it.


Claude Desktop (local, stdio)

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "shopify-theme": {
      "command": "node",
      "args": ["/Users/you/projects/shopify-theme-mcp/dist/index.js"],
      "env": {
        "SHOPIFY_STORE": "my-store",
        "THEME_DIR": "/Users/you/projects/my-theme",
        "SHOPIFY_CLI_THEME_TOKEN": "shptka_xxxxxxxxxxxx",
        "PATH": "/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin"
      }
    }
  }
}
  • SHOPIFY_STORE is the handle only — the part before .myshopify.com.

  • Both paths must be absolute.

  • The explicit PATH matters. Claude Desktop launches servers with a minimal environment, and the server shells out to shopify and git. Run which shopify and make sure that directory is in the list, or every tool call will fail with "command not found".

  • Omit SHOPIFY_CLI_THEME_TOKEN if you used interactive login.

  • Restart Claude Desktop after saving.

Then start it once and pull your theme: ask Claude to run list_themes, then theme_pull.


Tools

Twelve tools. Anything that writes commits to git automatically.

Tool

What it does

Key parameters

list_themes

List themes with IDs and roles (live / unpublished / development)

theme_pull

Download a theme into THEME_DIR and snapshot it in git

theme_id (omit = live), only (glob)

list_files

List local theme files

filter

read_file

Read a file with line numbers

path, line range

search_files

Grep theme files for text or regex

query, is_regex, file_filter, max_results, include_hidden

write_file

Create or overwrite a file → commits

path, content

patch_file

Exact find-and-replace → commits

path, find, replace, allow_hidden

delete_file

Delete a local file → commits

path

theme_push

Upload to Shopify

theme_id, new_theme_name, only, allow_live

publish_theme

Make a theme live

theme_id, confirm (must be true)

git_history

Show recent commits

limit

git_revert_file

Restore a file to an earlier commit

path, commit

Writes are restricted to valid Shopify theme directories: assets, blocks, config, layout, locales, sections, snippets, templates.

With theme_id omitted, theme_push creates a new unpublished theme named claude-edit-YYYY-MM-DD unless you pass new_theme_name.


Hidden and disabled content

This is the behaviour most likely to surprise you. Shopify marks sections and blocks that exist in a template but aren't shown with "disabled": true. Themes accumulate a lot of these.

The server treats hidden content as off-limits by default:

  • search_files skips matches inside disabled sections/blocks and tells you how many it skipped. Pass include_hidden: true to see them.

  • patch_file refuses to edit inside disabled content unless you pass allow_hidden: true.

So if Claude reports "no matches" for text you can see in a template JSON file, the section is probably disabled — the visible copy you actually meant is likely worded differently elsewhere. Ask Claude to search again with include_hidden.

This exists because "change the headline" almost always means the live headline, and editing a dormant section produces a change that appears to do nothing.


Remote mode (HTTP)

The same server can run as a remote MCP endpoint, reachable from claude.ai, Claude Desktop and mobile. Set MCP_TRANSPORT=http and it serves Streamable HTTP on localhost behind an unguessable secret path segment.

export SHOPIFY_STORE=my-store
export THEME_DIR=/opt/my-theme
export SHOPIFY_CLI_THEME_TOKEN=shptka_xxxx
export MCP_TRANSPORT=http
export PORT=8787
export MCP_SECRET=$(openssl rand -hex 24)   # save this — it's your credential
node dist/index.js

Endpoint

Method

Purpose

/<MCP_SECRET>/mcp

POST

MCP endpoint

/healthz

GET

Returns ok, for monitoring

Anything else returns 404. MCP_SECRET must be at least 16 characters or the server exits. It binds to 127.0.0.1 only — put a tunnel or reverse proxy in front of it, never expose the port directly.

Requests are stateless (a fresh server per request), but all filesystem, git and CLI work is serialized through a global mutex, so concurrent sessions can't corrupt the repo.

VPS setup (Ubuntu/Debian)

# 1. dependencies
# Node 22.12+ is required by the Shopify CLI
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash - && sudo apt install -y nodejs git
sudo npm install -g @shopify/cli@latest

# 2. application
sudo mkdir -p /opt/shopify-theme-mcp /opt/my-theme
sudo git clone https://github.com/GOFORWRD/shopify-theme-mcp.git /opt/shopify-theme-mcp
cd /opt/shopify-theme-mcp && npm install && npm run build

Create /etc/systemd/system/shopify-theme-mcp.service:

[Unit]
Description=Shopify Theme MCP
After=network.target

[Service]
WorkingDirectory=/opt/shopify-theme-mcp
ExecStart=/usr/bin/node dist/index.js
Restart=always
Environment=SHOPIFY_STORE=my-store
Environment=THEME_DIR=/opt/my-theme
Environment=SHOPIFY_CLI_THEME_TOKEN=shptka_xxxx
Environment=MCP_TRANSPORT=http
Environment=PORT=8787
Environment=MCP_SECRET=replace-with-openssl-rand-hex-24

[Install]
WantedBy=multi-user.target

The unit file holds live credentials — keep it at 0600 and outside the repo.

sudo chmod 600 /etc/systemd/system/shopify-theme-mcp.service
sudo systemctl daemon-reload && sudo systemctl enable --now shopify-theme-mcp
curl http://127.0.0.1:8787/healthz            # -> ok
curl -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8787/   # -> 404, as expected

Expose it with a Cloudflare Tunnel

Add to your tunnel's ingress rules:

  - hostname: shopify-theme.example.com
    service: http://localhost:8787
cloudflared tunnel route dns <tunnel-name> shopify-theme.example.com
sudo systemctl restart cloudflared

Connect Claude

  • claude.ai / Desktop / mobile: Settings → Connectors → Add custom connector → https://shopify-theme.example.com/<MCP_SECRET>/mcp

  • Local stdio: omit MCP_TRANSPORT and use the Claude Desktop config above.

Seed the theme directory once on the host by calling theme_pull (or running shopify theme pull) before your first editing session.


Configuration reference

Variable

Required

Default

Purpose

SHOPIFY_STORE

yes

Store handle, e.g. my-store for my-store.myshopify.com

THEME_DIR

yes

Absolute path to the local theme directory

SHOPIFY_CLI_THEME_TOKEN

recommended

Theme Access password (shptka_…); required for headless use

MCP_TRANSPORT

no

stdio

Set to http for remote mode

PORT

no

8787

HTTP listen port (http mode only)

MCP_SECRET

http mode

Secret path segment, min 16 chars (openssl rand -hex 24)

The server exits at startup if SHOPIFY_STORE or THEME_DIR is missing, or if MCP_TRANSPORT=http without a valid MCP_SECRET. See .env.example.


Typical session

You: "Update the countdown in the announcement bar to say 'Last day for guaranteed delivery'"

Claude pulls the live theme → searches for the text → patches the template JSON → pushes to a new unpublished theme → returns the preview URL → you review → you say "publish" → Claude publishes.

Every step is committed to git, so git_history and git_revert_file will undo anything.


Security

  • SHOPIFY_CLI_THEME_TOKEN and MCP_SECRET are credentials. Keep them in your Claude Desktop config or systemd unit — never commit them. .gitignore covers .env; the systemd unit lives outside the repo by design.

  • In remote mode the secret path is the credential. Anyone with the full URL can read and rewrite your theme. URLs leak more readily than headers — shell history, proxy logs, config files — so rotate MCP_SECRET if it is ever exposed, and update your connector.

  • The server binds to 127.0.0.1 only; a tunnel or proxy should be the sole public route.

  • Prefer a Theme Access token over a full CLI login: it is scoped to themes and cannot reach orders or customer data.

  • Live-theme changes always require an explicit flag (allow_live, confirm). Don't configure Claude to auto-approve those tools.


Known limitations

  • theme_push does not delete remote files that were deleted locally. Remove them via the Shopify admin, or run the CLI manually.

  • Binary assets (images, fonts) sync but can't be read or edited via read_file / patch_file.

  • If someone edits the theme in the Shopify admin at the same time, re-run theme_pull before editing or you may clobber their changes.

  • search_files and patch_file hide disabled content by default — see Hidden and disabled content.


Troubleshooting

"Missing required env vars" on startup. SHOPIFY_STORE or THEME_DIR isn't set. In Claude Desktop they must be inside the server's env block, not your shell profile.

spawn shopify ENOENT / "command not found". Claude Desktop's minimal environment can't find the Shopify CLI. Add its directory to the explicit PATH in your config — check with which shopify.

CLI asks for a browser login, or hangs in remote mode. Set SHOPIFY_CLI_THEME_TOKEN. Interactive sessions expire and can't work headlessly.

Shopify CLI errors about the Node version. The CLI requires Node 22.12+. Check with node --version; upgrade with nvm install 22 && nvm use 22, or reinstall Node from your package manager. This package's own engines field says 18+, but the CLI is the binding constraint.

You lost the Theme Access password. It can only be viewed once and the link expires after 7 days. Delete the entry on the Theme Access Passwords page and create a new one — see Getting a Theme Access token.

401 / Unauthorized from theme commands. The token was revoked, belongs to a different store, or SHOPIFY_STORE doesn't match it. Verify outside Claude with SHOPIFY_CLI_THEME_TOKEN=… shopify theme list --store my-store.

Search finds nothing for text you can see. The section is probably disabled — retry with include_hidden: true. See Hidden and disabled content.

Push refused with a live-theme message. Working as intended. Push to an unpublished copy (omit theme_id), preview it, then publish deliberately.

404 from the tunnel. Every path except /<MCP_SECRET>/mcp and /healthz returns 404. Check the URL includes the full secret segment.

Server exits immediately in http mode. MCP_SECRET is missing or shorter than 16 characters.


Licence

MIT — see LICENSE.

Available Tools

12 tools
delete_fileDelete theme fileA

Delete a local theme file and auto-commit. Note: theme_push does not delete remote files unless you push with the CLI's --nodelete disabled; mention this to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNo
filenameYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It adds useful context: the deletion is local, auto-commits, and remote deletion via theme_push has a caveat to mention. However, it does not disclose what the tool returns, whether deletion is permanent/recoverable, or errors such as nonexistent files.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action, followed by a necessary warning. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no annotations and no output schema, the description leaves important gaps: parameter meanings are not stated, return/confirmation behavior is absent, and failure/edge-case behavior is unspecified. The remote-deletion caveat is helpful but not sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers none of the parameters, and the description does not explicitly explain 'filename' or 'message'. The phrase 'auto-commit' loosely implies 'message' may be a commit message, and 'theme file' implies what 'filename' refers to, but this is weak compensation for 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Delete'), resource ('local theme file'), and consequence ('auto-commit'). The word 'local' also distinguishes it from remote/theme_push operations, and the description is not just a restatement of the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: to delete local theme files with auto-commit. It also gives a relevant warning about theme_push's remote deletion behavior, which helps an agent avoid misusing the sibling. However, it does not explicitly state when not to use delete_file or name alternatives for other deletion workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_historyShow edit historyA

Show recent git commits for the local theme (every edit auto-commits).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description must carry behavior. It usefully discloses that edits auto-commit and that the history is local, but it does not describe the return shape, ordering, or whether the command is strictly read-only. The verb 'Show' implies no mutation, but the absence of a full behavioral contract is a gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One focused sentence with a useful parenthetical; no filler. The core action and context are front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with no required parameters and no output schema, this is minimally adequate: an agent can call it without arguments and understand it returns recent commits. It is incomplete in explaining the optional limit parameter and the exact nature of the returned commit data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has a single 'limit' parameter with min/max constraints but no description, and the tool description never mentions it. The parameter name is self-explanatory, but the description adds no semantic value for it and does not state a default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Show') and resource ('recent git commits for the local theme'), and the parenthetical clarifies the commit model. This is enough to distinguish it from file content tools and from git_revert_file, which is about reverting rather than viewing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by the purpose: call this when you need the recent commit history of the local theme. However, it does not explicitly state when not to use it or compare against alternatives such as read_file or git_revert_file.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_revert_fileRevert a file to a previous commitA

Restore one file to its state at a given commit (from git_history), then commit the revert. Use to undo a bad edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
commitYesCommit hash from git_history, e.g. 'a1b2c3d'
filenameYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses two key behaviors: restoring a single file and automatically committing the revert. This is important context that an agent needs before calling. However, it does not disclose whether the commit is created automatically with a generated message, whether the working directory must be clean, or what happens to uncommitted changes in that file—these are significant gaps for a mutating git operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. Every word earns its place: the action, the input source, the follow-up action, and the intended use case. It is front-loaded and easily scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a mutating git operation with no annotations, no output schema, and two parameters. The description explains the core flow but misses several things an agent would need to know for safe invocation: whether the revert is committed immediately, how the commit message is generated, and any preconditions like a clean working tree. Given the complexity of git operations, the description is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: the 'commit' parameter has a description, but 'filename' has none. The description does not add extra meaning for the parameters, but it does indicate that the commit should come from git_history and the filename is the target file. This is about baseline level—it neither compensates for the missing 'filename' description nor adds meaningful detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: restore one file to a state at a given commit and commit the revert. It names the resource (file) and the source (git_history commit), which makes the tool's purpose unambiguous. However, it does not explicitly distinguish it from other file-related git tools beyond mentioning git_history, so it loses one point for lack of sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes the use case 'Use to undo a bad edit' and explicitly mentions pulling the commit from git_history, which provides clear context for when to use this tool. It does not explicitly state when not to use it or name an alternative tool, so it is a strong but not perfect usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filesList theme filesA

List files in the local theme directory. Optionally filter with a substring or simple pattern (e.g. 'sections/', '.liquid', 'countdown').

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoCase-insensitive substring filter on the relative path

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of conveying behavior. 'List files in the local theme directory' clearly signals a read-only, non-mutating operation, and the filter examples illustrate accepted forms. It does not describe return format or recursion behavior, but for a simple listing tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states the core operation and scope; the second provides practical filter examples. Every part earns its place, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and no output schema or annotations, the description covers the key facts: what is listed, where, and how to filter. Minor gaps include the exact return format and the precise pattern syntax, but these are not critical given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the filter parameter at 100% coverage, giving a baseline of 3. The description adds value by showing concrete examples ('sections/', '.liquid', 'countdown') and using 'simple pattern,' which suggests broader matching than the schema's 'substring' wording. This goes beyond the structured schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List files in the local theme directory.' This clearly identifies the operation and distinguishes it from siblings like list_themes (lists themes) and search_files (searches file contents). The optional filter is described as a secondary behavior, not the core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: to list files, optionally filtered. However, the description does not explicitly state when to prefer list_files over related tools such as search_files, read_file, or theme_pull, nor does it mention when not to use this tool. Guidance is left to the agent's inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_themesList themesA

List all themes in the store with their IDs and roles (live, unpublished, development). Use this first to find theme IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations available, the description carries the full burden of behavioral disclosure. It clearly states a read-only enumeration behavior ('List all themes') and exposes that it returns roles including live, unpublished, and development. The verb 'list' strongly implies no mutation, though an explicit 'read-only' statement would have been slightly more transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first front-loads the action and output details, the second adds a practical usage hint. There is no filler, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives the essential return value (IDs, roles) and a usage directive, which is sufficient for a zero-parameter list tool. Since no output schema exists, the description fills the gap with the key fields, though it could have been slightly more explicit about the shape of the returned list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty schema, so the 100% schema coverage makes parameter documentation moot. The description correctly avoids inventing parameters and focuses on the output, which is appropriate for a zero-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and names the resource ('all themes in the store'), and adds key output details (IDs and roles with allowed values live, unpublished, development). This clearly distinguishes it from sibling operations like publish_theme or theme_pull, which act on themes rather than enumerate them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Use this first to find theme IDs' explicitly identifies the intended context for this tool. However, it does not name any sibling alternatives or state when not to use it, so it stops short of the full when/when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

patch_filePatch theme file (find & replace)A

Edit an existing theme file by replacing an exact string. old_str must appear exactly once in the file (include enough surrounding lines to make it unique). Auto-commits to git. Preferred over write_file for edits.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoShort description for the git log
new_strYesReplacement text (empty string deletes old_str)
old_strYesExact text to replace — must be unique in the file
filenameYes
allow_hiddenNoRequired (true) to edit content inside a disabled/hidden section or block. Only set after the user explicitly confirms they want to edit hidden content.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses a critical side effect ('Auto-commits to git'), the exact-match constraint, and the requirement that old_str appear exactly once. It does not go into failure modes or hidden-content behavior, but the most important behavioral traits are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences deliver the action, constraint, side effect, and sibling-tool guidance with no filler. The most important operational details are front-loaded, and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter edit tool with no output schema, the description plus schema covers the core invocation: what to patch, how to make the match unique, the auto-commit effect, and when to prefer it over write_file. The allow_hidden parameter is documented in the schema, and return-behavior details are not essential for calling this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the schema handles most parameter meaning. The description adds practical value beyond the schema by explaining that enough surrounding lines should be included to make old_str unique, which helps the agent construct a valid old_str value. This is a meaningful addition rather than mere repetition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Edit an existing theme file'), the exact mechanism ('replacing an exact string'), and the resource. It also distinguishes itself from write_file by explicitly saying it is preferred for edits, so an agent can differentiate it from siblings without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear, actionable guidance: use this for editing existing files by exact replacement, and it explicitly names write_file as the alternative for other cases ('Preferred over write_file for edits'). It also tells the agent how to make old_str unique by including surrounding lines, which is essential for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_themePublish theme (make it live)A

Make an unpublished theme the live storefront theme. DESTRUCTIVE for the current live theme's status — only call after the user has previewed the theme and explicitly asked to publish. confirm must be true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesMust be true; set only after explicit user confirmation
theme_idYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It explicitly warns 'DESTRUCTIVE for the current live theme's status,' disclosing the key side effect. It doesn't mention reversibility or the exact fate of the old theme, but the most critical behavioral trait is clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences with zero filler. The action is front-loaded, the destructive warning is placed immediately after, and the confirm requirement concludes it. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no output schema, the description covers the action, the destructive side effect, and the required confirmation. Minor gaps include no mention of return values or what exactly happens to the old live theme beyond its status changing, but these are not critical for successful invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already thoroughly documents confirm, and the description reinforces its precondition ('confirm must be true') without adding new meaning. The theme_id parameter has no schema description and the tool description doesn't explain it either, though its meaning is fairly inferable from the tool's purpose. At 50% schema coverage, the description only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: making an unpublished theme the live storefront theme. This distinguishes it from generic file operations and defines a clear state change. However, it does not explicitly reference sibling alternatives like list_themes or create_theme, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit precondition: 'only call after the user has previewed the theme and explicitly asked to publish.' This is clear when-to-use guidance and implies when-not-to-use (do not call before user confirmation). It doesn't explicitly name alternative tools, so it loses a point for missing alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_fileRead theme fileA

Read a theme file's contents with line numbers. For large files, pass start_line/end_line to read a slice. Use search_files first to locate the relevant region.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_lineNo
filenameYesTheme-relative path, e.g. sections/header.liquid
start_lineNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It discloses that the operation is read-only, includes line numbers, and supports slicing, but it does not mention behavior for missing files, default full-file reading, or any pagination/error details. Some useful transparency, but gaps remain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no redundancy. The action is front-loaded, followed by conditional usage guidance and the recommended workflow. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately covers the core read operation, line numbering, range slicing, and the relationship to search_files. It omits explicit handling of errors or nonexistent files, but for a simple read tool without an output schema, this is a reasonable level of completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% because start_line and end_line lack descriptions. The description adds meaning by explaining that these parameters are for reading a slice of a large file, but it does not clarify edge cases like whether ranges are inclusive or what happens when only one is provided. Partial compensation for low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a theme file's contents with line numbers, which distinguishes it from sibling tools like write_file, patch_file, delete_file, and search_files that either modify or search instead of reading. The action and resource are specific and immediately understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use search_files first to locate the relevant region and to pass start_line/end_line for large files. It provides actionable guidance for when to use this tool and how to scope reads, though it does not explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_filesSearch theme filesA

Search all text files in the theme for a string or JavaScript regex. Returns matching files with line numbers and context. Always use this to locate code instead of reading whole files.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText or regex to search for
is_regexNoTreat query as a regex (default false)
file_filterNoOnly search files whose path contains this substring, e.g. 'sections/'
max_resultsNo
include_hiddenNoAlso return matches inside disabled (hidden) sections/blocks in template JSON. Default false — hidden content is skipped.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral transparency burden. It clearly indicates a read-only search operation, scopes the search to text files, states the regex flavor, and discloses the return format: matching files with line numbers and context. It does not mention performance implications or default limits, but the read-only nature is clearly implied by the verb 'Search' and 'Returns.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences with no filler. It front-loads the core action and scope, describes the return value, and then gives a practical usage rule. Every sentence contributes unique value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with five parameters and no output schema, the description covers the essential context: what is searched, what the query format is, and what the response contains. The schema covers parameter details. Minor gaps include no mention of default max_results behavior or what happens when no matches are found, but these are not critical for selecting and invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the input schema already documents most parameters well. The description adds a bit of meaning by specifying 'JavaScript regex' and by noting the return includes line numbers and context, but it does not add meaningful detail for max_results or file_filter beyond what the schema provides. This matches the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Search all text files in the theme for a string or JavaScript regex.' It also describes the return value ('matching files with line numbers and context'), which makes the purpose specific. It distinguishes itself from read_file by explicitly saying this is for locating code rather than reading whole files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage direction: 'Always use this to locate code instead of reading whole files.' This tells the agent when to prefer this tool over traversing files directly. However, it does not explicitly name the alternative tool or state when not to use it beyond the 'instead of reading whole files' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

theme_pullPull themeA

Download a theme's files from Shopify into the local theme directory and snapshot the result in git. Pass theme_id (from list_themes); omit to pull the LIVE theme. Run this before starting an editing session so local files are fresh.

ParametersJSON Schema
NameRequiredDescriptionDefault
onlyNoOptional glob to pull only matching files, e.g. "sections/*.liquid"
theme_idNoTheme ID to pull. Omit to pull the live theme.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It surfaces the non-obvious side effect of snapshotting the result in git and clarifies that pulling refreshes local files. It does not explicitly warn that local changes may be overwritten, but the 'before editing' guidance and download semantics make the main behavior transparent enough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences with no filler. The core action is front-loaded, followed by parameter routing and a clear usage directive. Every sentence earns its place and the total length is appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core operation, git side effect, theme selection, and when to run it, which is sufficient for a tool with two optional parameters and no output schema. It could mention whether pulling overwrites local files or what the command returns, but the existing context makes correct invocation mostly unambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds marginal value by pointing out that theme_id comes from list_themes and confirming the omission behavior, but it does not elaborate on the 'only' glob parameter. This matches the baseline expectation when schema already covers parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action with verb and resource: it downloads a theme's files from Shopify into the local theme directory and snapshots the result in git. It clearly distinguishes from sibling theme_push by describing the opposite direction of data flow, so an agent can tell them apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to run the tool: 'Run this before starting an editing session so local files are fresh.' It also instructs how to choose the theme via theme_id from list_themes and explains the omit behavior for the live theme. It does not explicitly list when not to use it or compare to alternatives, but the timing and context are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

theme_pushPush theme to ShopifyA

Upload the local theme directory to Shopify.

  • Default: push to an UNPUBLISHED copy (safe; returns a preview URL).

  • Pass theme_id to push to a specific existing theme.

  • Pushing to the LIVE theme is BLOCKED unless allow_live=true. Only set allow_live after the user explicitly confirms.

ParametersJSON Schema
NameRequiredDescriptionDefault
onlyNoOptional glob, e.g. "sections/hero.liquid"
theme_idNoExisting theme ID to push to. Omit to create a new unpublished theme.
allow_liveNoMust be true to push to the live/published theme
new_theme_nameNoName for the new unpublished theme (used when theme_id is omitted)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the safety burden. It discloses that the default is non-destructive, that live pushes are blocked unless allow_live=true, and that a preview URL is returned. It does not spell out whether pushing to an existing theme overwrites or deletes files, but the safety-critical behavior is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tight and efficiently structured: one purpose sentence followed by three focused bullets. Every sentence carries a distinct rule or fact, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is strong: it covers the safe default, how to target an existing theme, the live-push guardrail, and the preview URL. It leaves some operational details implicit, such as sync/overwrite behavior and the exact response when theme_id is supplied, so it is not quite a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline applies. The description reinforces theme_id and allow_live behavior at a usage level, but it does not add parameter syntax or format details that the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete action ('Upload the local theme directory to Shopify') and immediately distinguishes the safe default from targeted/live pushes. It is clearly differentiated from theme_pull and publish_theme, and the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear conditional guidance: default creates an unpublished copy, theme_id targets an existing theme, and allow_live=true requires explicit user confirmation. It does not explicitly compare against sibling tools like theme_pull or publish_theme, but the invocation conditions are well specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_fileWrite theme file (full contents)A

Create a new theme file or fully overwrite an existing one, then auto-commit to git. For small edits to existing files prefer patch_file — it is safer and cheaper.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesFull file contents
messageNoShort description of the change for the git log
filenameYesTheme-relative path, e.g. snippets/countdown.liquid

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it discloses the two most important behavioral traits: full overwrite is destructive, and the tool auto-commits to git as a side effect. It does not detail return values, permissions, or rollback options, but the critical behaviors an agent must weigh before calling are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The core behavior is front-loaded first, and the routing guidance follows immediately. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the essential decisions: what it does, when to use it, and its notable side effects. It does not mention the return value or commit details, but an agent has enough to invoke it correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: filename, content, and message all have descriptive text, so the baseline is 3. The description adds the auto-commit context that connects message to the git log, but all parameter meaning is already present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a new theme file or fully overwrite an existing one', and adds the auto-commit behavior. It also explicitly distinguishes itself from patch_file, so an agent can tell them apart without inspecting either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing guidance: 'For small edits to existing files prefer patch_file — it is safer and cheaper.' This clearly tells an agent when to choose this tool versus the alternative, leaving no condition to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updatesv1.1.0
    • First observeddelete_file
    • First observedgit_history
    • First observedgit_revert_file
    • First observedlist_files
    • First observedlist_themes
    • First observedpatch_file
    • First observedpublish_theme
    • First observedread_file
    • First observedsearch_files
    • First observedtheme_pull
    • First observedtheme_push
    • First observedwrite_file

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: theme lifecycle, local file operations, and git safety. write_file and patch_file are clearly differentiated by overwrite vs exact-string edit, and list_themes vs list_files are unambiguous.

Naming Consistency3/5

Most tools follow verb_noun naming (list_themes, read_file, patch_file), but theme_pull and theme_push reverse that pattern, and git_history/git_revert_file use a prefix style. The mix is readable but not fully predictable.

Tool Count5/5

At 12 tools, the set is well-scoped and every tool fills a clear role in the theme development workflow. There is no bloat or trivial redundancy.

Completeness5/5

The tool surface covers the full local-to-remote Shopify theme workflow: theme discovery, pulling/pushing files, file CRUD, publishing, and git-backed undo. No major operational gaps are evident for standard editing sessions.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/GOFORWRD/shopify-theme-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server