Skip to main content
The Frontic Tools MCP server connects AI coding assistants directly to your Frontic projects, letting you build storefronts and configure your Frontic API from your IDE. Pair it with the Frontic Docs MCP server so the agent can also answer “how does X work?” questions without leaving the editor.
Frontic MCP Server Hero

Overview

Connect your favorite AI coding assistants directly to your Frontic Commerce projects through secure OAuth authentication. Build a frontend AND the corresponding Frontic API - all from your coding agent or IDE of choice.

Claude Code

Full project management and content creation workflows

Claude Desktop

Interactive Frontic operations from your desktop

Cursor

Integrated development experience with AI assistance
The MCP server provides tools across these categories:

Project & Resource Discovery

Browse projects, list each resource kind, inspect storage records, and preview Fetch API responses

Blocks, Listings, Pages & Trees

Create and manage blocks, listings, pages, and menu trees that define your API

Storage Management

Create Data Storages, then add, rename, and remove top-level fields

Project Configuration

Explore domains, scopes, regions, and locales

Browse Data

Search storage records and raw feed records

Integrations

Inspect connected integrations and their feed schemas before mapping

Data Syncs & Value Composer

Create data syncs, configure field mappings, and preview composer operations

Context Documents

Manage skills, rules, guides, and other context documents

Shopware Insights

Read the promotions and sales channels of a connected Shopware store

Setup

The fastest path is the CLI - pick your package manager:
Swap cursor for claude, windsurf, vscode, or codex. The CLI prompts whether to install Frontic Tools, Frontic Docs, or both - the recommended default is both. See the Frontic CLI reference for full options. If you’d rather edit the config yourself, drop this entry into your client’s MCP config file:
The first time you connect, you’ll be prompted to authenticate via OAuth. The token carries your Frontic account’s permissions - whatever role you have on a project, the MCP can do on that project, and nothing more.

Client-specific configuration

Add to .mcp.json at your project root - Claude Code reads project MCP config from this file:
Edit the Claude Desktop config file:
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
Add to .cursor/mcp.json in your project root, or Cursor’s global settings:

Common Workflows

Most tools are a step in a chain, and the chain is what gets work done. These four cover almost everything people build through the MCP server.

Build a backend from zero

list_projects to find the project, then create_storage for the Data Storage and update_storage to add its fields. Wrap it in a Detail Block with create_block, expose a collection with create_listing, and route it with create_page. Finish with preview_fetch_response to see exactly what the frontend will receive.

Map a feed into a storage

list_integrations to find the connected system, then get_integration_feed for the flat field list in dot-path notation. Shape the storage to match, then create_data_sync - which creates the sync shell only. Call get_data_sync for the field tree, map the fields with update_data_sync_value_configs, and dry-run the result with preview_composer_record before anything is persisted. Verify with search_storage_records once the sync has run.

Build a navigation menu

list_storages for the source data and list_blocks to find an item block worth reusing - multiple Menu Trees can share one. create_tree builds the hierarchy, update_tree narrows it with query conditions.

Debug what the frontend receives

preview_fetch_response for the served payload, search_storage_records for the stored values behind it - filtered by scope, region, and locale to see contextualized output. When you need a storage’s real keys and slugs rather than a search, list_storage_record_examples returns up to five records with their system fields.

Example Prompts

Once connected, try these prompts to explore the MCP server’s capabilities:

Have your agent list your projects and inspect the main one

Ask the agent to map out your Data Storages and their fields

Let the agent build a Search Listing with filters and sorting

Tell the agent to scaffold a hero block with the standard fields

Have the agent assemble a homepage from existing primitives

Get the agent to plan and set up a basic storefront end to end

Have the agent extend a Data Storage schema with a new translatable field

Have the agent create a Products storage and connect a feed

Have the agent set up a content storage from scratch

Have the agent add a relation field linking two storages

Walk the integration → feed → data sync workflow end to end

Ask the agent to inspect your data syncs and their field mappings

Have the agent preview a Value Composer transformation on a sample record

Ask the agent what the connected Shopware store is running

Ask the agent to walk your scope, region, and domain hierarchy

Available Tools

What each tool may do

Every tool declares whether it only reads, as an MCP annotation. Clients that act on those annotations can run the reading tools without stopping to ask and keep prompting for the rest; for clients that want it spelled out, the allow-list below does the same thing explicitly. The preview_* tools count as reads because all three are dry-runs - they show you the transformed value or the API response without persisting anything. update_storage sits with delete_resource because its field operations include deleting a field, and deleting a field takes the stored values with it. Adding and renaming fields is safe; removing one is not reversible.
Add to .claude/settings.json in your project. Everything not listed still prompts:

Project & Resource Discovery

list_projects

Browse all your Frontic projects with their names, IDs, data types, and configured locales. Use it when you don’t already know which project you’re working against - once a project is selected, the resource tools take its ID directly.

preview_fetch_response

Get a sample Fetch API response for a block, listing, tree, or page - exactly what the frontend receives when calling the Frontic API. Useful for understanding the response shape before building your frontend.

delete_resource

Permanently delete a block, listing, page, storage, or tree from the project. This action cannot be undone.

Block Management

list_blocks

Single-record endpoints with their fields, parameters, and storageId

create_block

Create a new block - a reusable content component that defines which fields are exposed in Fetch API responses. Blocks serve single-record endpoints.

update_block

Update an existing block by adding or removing fields, and control its active status.

Listing Management

list_listings

Collections with their search, filter, and sort fields, parameters, and query conditions

create_listing

Create a new listing - a searchable, filterable, sortable collection that performs search queries on a block index.

update_listing

Configure all aspects of an existing listing: search fields, filter fields, sort fields, parameters, query conditions, search settings, and pagination.

Page Management

list_pages

URL routing patterns with their block and that block’s storageId

create_page

Create a page - a URL routing pattern that generates SEO-friendly routes from block data records.

update_page

Update an existing page’s URL generation settings like slug source, conflict strategy, and delete behavior.

Tree Management

list_trees

Hierarchical collections with their storageId, query conditions, and nested item block

create_tree

Create a Menu Tree - a hierarchical collection of records (navigation menus, category trees, support article hierarchies). Each tree references a connected Data Storage and a Detail Block that defines the node shape. Multiple trees can share the same block; the agent prefers reusing an existing block over creating a new one.

update_tree

Configure an existing tree’s query conditions - the business-logic filters that narrow which records the tree includes. Use it after create_tree to make a tree more specific.

Storage Management

list_storages

Data schemas with their fields

create_storage

Create a new Data Storage with a name and schema type.
  • default creates a regular Content storage for content or reference data.
  • commerce creates a Products storage for product catalog data and adds commerce-specific system fields for variants, prices, parent keys, and options.
After creating the storage, use update_storage to add custom fields.

update_storage

Update an existing Data Storage by adding, renaming, or removing top-level fields. Removing a field deletes the values stored in it, which is why this tool is marked as destroying data. Field type is fixed at creation - to change a field’s type you delete and recreate it. Multiple operations can be batched in a single call and run sequentially, so a later operation can target a field added or renamed earlier in the same call. The tool works on top-level fields only - nested sub-fields of composite types aren’t editable through this tool. To create a new storage from scratch through MCP, use create_storage.

Project Configuration

Explore the context hierarchy of your project. get_project returns the whole configuration in one call: the project, its scopes with their regions and locales, and its domains with each domain’s scope, region, and locale resolved into names rather than left as IDs. The list_* tools enumerate one resource kind at a time.
  • Domains map a scope, region, and locale combination to URL routing.
  • Scopes are data segmentation layers (e.g., B2B vs B2C). Every project has at least the default public scope. A scoped field can return different values per scope - for example, true in scope A and false in scope B.
  • Regions are subdivisions of a scope (e.g., EU, US, APAC). Each region holds a currency and one or more locales, determining which prices to show.
  • Locales determine which translation to return for translatable fields. If a field is set as translatable, the response value matches the translation for that locale. list_locales is the complete list: a locale that no region exposes appears there and not in get_project.

get_project

How one project is configured, in a single call: the project itself, its scopes with their regions and locales, and its domains with each domain’s scope, region, and locale resolved into names and keys rather than left as IDs. Start here when you already know which project you are working on, and reach for list_projects only when you do not. fetchApi carries the hostname and the version token that addresses this environment. Send the token as the fs-version header on Fetch API calls: without it the Fetch API serves the public environment. environments lists the project’s other stages, each with its own version token, and a stage only carries a token when one is set - the public environment has none, because sending no fs-version header is how a caller reaches it. list_locales remains the complete locale list. A locale that no region exposes appears there and not here.

list_domains

List all domains configured in a project

list_scopes

List all scopes in a project

list_regions

List all regions within a scope

list_locales

List all configured locales in a project

Browse Data

Search and inspect the actual data in your project - both transformed storage records and raw feed records from integrations.

list_storage_record_examples

List up to five example records from a storage, each carrying the system fields the record has (key, active, parentKey, position, plus price and options on Products storages). Use it to learn a storage’s real shape - slugs, keys, field values - before writing query conditions against it.

search_storage_records

Search records in a storage to see the transformed values blocks and listings serve to the frontend. Useful for verifying data after a sync, debugging unexpected output, or pulling a realistic sample for a composer dry-run with preview_composer_value or preview_composer_record. Filter by scope, region, and locale to see contextualized values like scoped pricing or translated content. By default records[] contains bare payload objects - exactly what the user stored, no wrapper. Pass includeMetadata: true to get each record wrapped with its id, sourceId, parentSourceId, createdAt, and updatedAt. Opt in when you need to know when a record was updated/created or walk parent–child relationships in a follow-up call. metadata.parentSourceId is the storage-tree parent - distinct from any parentKey a user happens to have inside their own payload. That namespacing is why metadata is opt-in rather than always-on. availableFilters and metaSearchResult (pagination + total count) are always returned alongside records[], regardless of includeMetadata. Omit conditions entirely to return all records.

search_feed_records

Search feed records from an integration to see the connector-normalized data before the composer transforms it. Every commerce platform names fields differently (Shopify: flat keys; Shopware: dot-notation; commercetools: deeply nested objects), so inspecting an actual feed record is the only reliable way to know what’s available and how it’s shaped. Same metadata contract as search_storage_records: bare payloads by default, full envelope (id, sourceId, parentSourceId, createdAt, updatedAt) when you pass includeMetadata: true. availableFilters and metaSearchResult are always returned.

Integrations

Discover and inspect connected source systems and their feed schemas. The typical workflow is list_integrations → pick a feed → get_integration_feed → use the field paths in update_data_sync_value_configs or composer previews. Integrations belong to the Team rather than to a single project, so both tools here take no project and return the same results wherever you are working. The same holds for search_feed_records in Browse Data, which reads a feed rather than a storage.

list_integrations

Connected source systems with their channels and a compact feed inventory (id and name). Integrations belong to the Team, so this takes no project and returns the same list whichever project you are working in. Takes no parameters.

get_integration_feed

Get the full schema for a single integration feed by feed ID. Returns the integration metadata, feed metadata (including type, token, urls, methods, configurations, and refreshSupported), and a flat field list in dot-path notation with types - for example, title (string), manufacturer (object), manufacturer.name (string). The flat representation is what you copy into composer configs. If the feed ID isn’t found, the tool returns the list of available feed IDs across the Team’s integrations so the agent can recover without a separate discovery call.

Data Syncs

list_data_syncs

List all data sync configurations, showing which integrations feed into which storages

create_data_sync

Create a data sync shell that connects one integration feed to one storage with a name, feed, storage, and optional scope/channel/locale mappings. New data syncs are enabled on creation; call get_data_sync, then update_data_sync_value_configs, to configure field value mappings

get_data_sync

Get a single data sync with full field-level detail including value-composer configurations

update_data_sync_value_configs

Update data sync value composer field configurations by field ID

Value Composer

list_composer_operations

List all available value-composer operations with type, input/output shapes, and documentation

preview_composer_value

Preview a computed value by running a single value-composer config against a sample record (dry-run)

preview_composer_record

Preview a full transformed record by running all storage-field mapping configs against a sample source record

Context Documents Plus

Context document tools are part of Frontic Studio, available on the Plus plan.
Manage skills, rules, commands, guides, and other context documents that provide instructions and knowledge to AI agents working with your project.

list_context_documents

List all active documents in a collection (skills, rules, commands, guides)

get_context_document

Fetch a single document by key, returning full markdown with YAML frontmatter

create_context_document

Creates the document as a draft unless activate is true, which publishes it in the same call.

update_context_document

Update a document’s metadata and/or content

Shopware Insights

Read the store behind a project that has a Shopware integration configured. Both tools are read-only.

list_shopware_promotions

List active promotions with their discounts and validity window (validFrom/validUntil, ISO-8601, null = unbounded)

list_shopware_sales_channels

List sales channels with their configuration, theme configuration, languages, and currencies