isEnabled() / track() calls, reads the real error off a failed deployment before proposing a fix, and can trigger a deploy or roll one back without you leaving the editor.
Meridian MCP never grants access you don’t already have in the dashboard. Every tool call resolves the signed-in user and runs the same permission checks the web app runs, on the same catalog: a tool that mirrors a dashboard action needs the permission that action needs, and a role’s app scope applies to every app-scoped tool.
This server accesses the production Meridian platform only, including the staging and development environments of its apps. Apps created on the separate Meridian staging platform are not available through this server. See Environments.
Connect an AI client
There is no API key and no token to paste anywhere. The dashboard hands out a URL; your client obtains its own credentials over OAuth, and you approve the connection once in a browser.- Add the server URL to your MCP client (see below).
- The client discovers Meridian’s OAuth endpoints and registers itself. Nothing has to be pre-created in the dashboard.
- The client opens Meridian’s consent screen in a browser, which names the client and what it’s asking for. Sign in if you aren’t already.
- On Approve, the client exchanges the authorization code for its tokens. On Deny, nothing is granted.
- The client appears under Connected AI clients on the Meridian MCP page, with when it connected and when it was last used.
Revoke a client
Connected AI clients lists every client you’ve approved. Revoking one invalidates its access token and refresh token immediately. The client stops working and has to connect and be approved again. Revoked entries stay in the list, marked as revoked, rather than disappearing. Connections are per developer, not per organization.How tools are scoped
The server keeps no state between calls. There’s no “current app” or “current organization”, so every app-scoped tool takes explicit identifiers:
The opening move for an agent is
whoami, then apps_list. The identifiers every other tool needs come from those two calls. Output always uses the same public identifiers the platform API exposes; internal numeric ids never appear.
Tool catalog
Forty-nine tools. Each is annotated so a well-behaved client knows what it can run unattended: read-only (no side effects), idempotent (safe to repeat), destructive (needs confirmation), or write (creates or updates Meridian config, draft-only for emails and automations). The catalog leans towards facts your repository can’t tell you: the variables injected into the deployed runtime, the live database schema, where webhooks are routed, and the Grow config an agent needs when wiring lifecycle flows.Orientation
Plan Builder
The highest-value surface: what an agent reads before writing SDK integration code.Deploy
Call
managed_variables_list before writing any code that reads process.env. Those variables are in neither the repository nor secrets_list, so an agent reading only your config concludes they’re unset. Use github_refs_list to feed deployment_create a real git_sha: a sha that hasn’t been pushed fails late during the build.
Webhooks
Together these separate the two failures that look identical from inside your code: no delivery row means Shopify never sent it (check the route); a 4xx/5xx
response_code means it arrived and your handler rejected it. Neither tool returns the webhook body or headers.
In webhook_routes_list, each route’s registration counts the stores where Shopify accepted the subscription (registered_shops) and where it did not (failed_shops, with last_error). A store Meridian could not reach at all, because its token was revoked or can’t be renewed, or Shopify refused the request, counts as failed on every topic it hasn’t registered, and its last_error starts with Could not reach followed by the store. A store that uninstalled your app drops out of these counts the next time you save the topic set.
forward_host is the origin Meridian really posts to, and forward_host_source says which destination won: external (the verified external domain you selected as the forward host), environment (your app’s Meridian deployment), or platform. A platform source is Meridian’s own receiver, the last resort when an app has neither: forwarded events stop there and never reach your app, and forward_url then gives the single URL they go to. Both are null when nothing is routed at all.
reconcile_available says whether Meridian can reach the stores that already installed your app, which it can only do when the app is deployed on Meridian. When it is false, Meridian can’t register topics on those stores itself: the SDK registers your topic set on each store when that store authenticates your app (see Re-registering webhooks). Managed topics are in that set from install on. A route you added reaches a store only at that store’s first sign-in after you added it, so each such route carries sign_in: installed_shops, and awaiting_shops, the installed stores that haven’t signed in since. A sign-in within five minutes of adding the route still counts as awaiting, because the SDK can serve the topic set it cached before. sign_in is null on managed topics, and on every route when reconcile_available is true.
Shopify API alerts
Both need the Shopify API alerts: View permission on the app.
Databases
Developer database tools only ever reach the caller’s own database, never a teammate’s, even for an organization owner. Read
database_schema_get before writing a migration or query against a deployed environment: the live schema is whatever the last applied migration produced, and your repository may not agree with it.
CRM
Emails
Edit the body and activate in the dashboard. MCP never live-sends.
Automations
Discounts
Discounts are read-only through MCP: no create or reprice.
Resources and prompts
Two resources give the agent retrievable context:meridian://docs/{path} (Meridian’s public product documentation, the same pages at help.the-meridian.ai; empty path returns an index of .md/.mdx paths). Prefer docs_search mid-task and meridian://apps/{app}/config (an app’s whole configuration as one JSON document).
Two prompts arrive pre-filled with live data:
integrate_sdk: a guided walkthrough for wiring@the-meridian/sdkinto a Shopify embedded app, pre-filled with that app’s real feature and event keys, types, and per-plan values. Optionalsurfacenarrows it toprovider,pricing,usage, orserver.debug_failed_deploy: a guided investigation of a failed deployment, pre-filled with its real status, error, and recent build events, followed by an ordered set of follow-up calls.
What Meridian MCP never returns
No tool ever returns a secret value, not for a secret and not for a plain environment variable. An agent can confirm a variable exists and is spelled correctly, which is what almost every “missing env var” investigation actually needs.secrets_listandmanaged_variables_listreturn metadata only, never values and never the Secret Manager reference.dev_database_getreturns no password, connection string, or proxy token. Connect with the Meridian CLI (meridian dev).emails_list/email_getreturn metadata only, never HTML or design.webhook_deliveries_listreturns no body and no request headers.- Internal identifiers and internal-team-only flags never appear.
Mutations
Eleven tools write; the other thirty-eight only read. Ten of them change something, and every successful change is recorded in the organization’s activity log with the tool that made it. The eleventh,automation_test_run, is a dry trace that changes nothing and leaves no entry.
events_createadds one metered-usage event to the catalog. It does not touch per-plan terms.deployment_createis idempotent on(environment_id, git_sha): repeating it while that deployment is in flight returns the same one. A different sha while a deployment is active is refused: one active deployment per environment. V1 targets production only.deployment_rollbackshifts live traffic (annotated destructive). Refused if the target didn’t succeed or the environment has another deployment in progress.dev_database_migraterecords a run; it does not execute one.meridian migrateruns the migration locally and records it automatically.dev_database_resetdestroys every table and row in your developer database schema. Requiresconfirm: true.custom_field_values_setwrites custom field values on a store and fires the automation trigger a dashboard edit would.email_createwrites an inactive metadata draft.email_updatechanges an email’s metadata and, as a dashboard save does, the snapshot that every automation sending the email sends from. Neither activates, edits the body, or sends.automation_create/automation_updatewrite inactive drafts; graph updates only while inactive; noemailHtml.automation_test_runis a dry trace: no mail, no metering, no persisted run.
Plan requirements
Meridian MCP is gated on themcp plan feature, and the deploy-related tools additionally on the deploy feature. Every tier (Lite, Pro, and Enterprise) includes both, so no plan change is needed. Lite meters MCP calls (1,000 requests a month); Pro and Enterprise don’t meter them.