Squidex MCP server

by francyfox

Not rated
GitHub

About

MCP server for managing Squidex CMS content and schemas from AI agents

Details

Author
francyfox
Categories
Developer Tools, Other

Setup

Install Squidex MCP server in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/francyfox/squidex-mcp

Follow the installation instructions in the repository README, then restart your MCP client.

MCP server for managing Squidex CMS content and schemas from AI agents

An MCP (Model Context Protocol) server that lets AI agents read and writeSquidexCMS content directly. MCP is an open, model-agnostic protocol — any compliant client works (Claude Code, Claude Desktop, Cursor, Windsurf, custom agents on any model), not just Anthropic's. Built onBunfor fast, dependency-free startup — each agent session spawns its own server process over stdio.

It can target multiple Squidex apps/instances (e.g. prod + staging) from one running server — every tool takes an optionalprofileparameter, switchable without restarting the server. SeeProfilesbelow.

The easiest way to run it is vianpx— no download, no build step, just a Node.js install (which most machines already have).

In your Squidex app:Settings → Clients→ create (or copy) a client. You need:

- your Squidex URL (e.g.https://cloud.squidex.io)
- your app name
- the client ID (looks likeyour-app-name:default)
- the client secret

2. Register the server with your MCP client

claude mcp add \ --env SQUIDEX_URL=https://cloud.squidex.io \ --env SQUIDEX_APP=your-app-name \ --env SQUIDEX_CLIENT_ID=your-app-name:default \ --env SQUIDEX_CLIENT_SECRET=your-client-secret \ --transport stdio squidex \ --scope user \ -- npx -y @shalotts/squidex-mcp

--scope usermakes it available in every project, not just the current one.-ystopsnpxfrom pausing on an interactive "ok to install?" prompt, which would otherwise hang the connection on first run.

Claude Desktop:editClaude Desktop's ownconfig file for your OS (this is Claude Desktop's launcher config, notsquidex.config.jsonfromProfilesbelow — theenvblock here just sets environment variables for the process Claude Desktop spawns) — macOS:~/Library/Application Support/Claude/claude_desktop_config.json· Windows:%APPDATA%\Claude\claude_desktop_config.json· Linux:~/.config/Claude/claude_desktop_config.json

{ "mcpServers": { "squidex": { "command": "npx", "args": ["-y", "@shalotts/squidex-mcp"], "env": { "SQUIDEX_URL": "https://cloud.squidex.io", "SQUIDEX_APP": "your-app-name", "SQUIDEX_CLIENT_ID": "your-app-name:default", "SQUIDEX_CLIENT_SECRET": "your-client-secret" } } } }

Ask your assistant something like"List the content schemas in my Squidex app". If it replies with your schemas, it's working.

Alternative: standalone binary (no Node.js needed)

If Node.js/npx isn't available, download a prebuilt binary from theReleases pageinstead:

Make it executable on macOS/Linux (chmod +x ~/Downloads/squidex-mcp-<your-platform>; macOS may also requirexattr -d com.apple.quarantine <file>since it isn't notarized), then use its absolute path ascommandinstead ofnpxin the config above (and drop theargs/-ybits, which are npx-specific).

If you need more than one Squidex app/instance (e.g. prod + staging) reachable from the same server, use asquidex.config.jsonfile instead of env vars:

{ "defaultProfile": "prod", "requestTimeoutMs": 15000, "profiles": { "prod": { "url": "https://cloud.squidex.io", "app": "blog", "clientId": "...", "clientSecret": "..." }, "staging": { "url": "https://cloud.squidex.io", "app": "blog-s", "clientId": "...", "clientSecret": "..." } } }

Every tool accepts an optionalprofileparameter to pick which target to use — no server restart needed to switch. The file is re-read on every call.requestTimeoutMs(default 15000) applies to every Squidex HTTP request across all profiles.

By default the server looks forsquidex.config.jsonin its current working directory; point it elsewhere with theSQUIDEX_MCP_CONFIGenv var (absolute path recommended, since the client process's working directory isn't always predictable). If no config file is found at all, the fourSQUIDEX_env vars from Quick start are used as a single implicitdefaultprofile.

Content field data must already be shaped per Squidex's partitioning ({ "title": { "iv": "..." } }for invariant fields,{ "en": "...", "de": "..." }for localized ones) — callschema_getfirst to see each field's mode, andlanguage_listto see which language codes are actually configured on the app.

bun install bun test # unit tests (config, token cache, query builder — no live Squidex needed) bun run typecheck # tsc --noEmit bun run dev # start the server with --watch, for local development

Point your MCP client atbun run src/index.tsin this directory instead of a downloaded binary while developing.

bun run buildproduces the Node-targeteddist/index.jsthat gets published to npm (dependencies stay external — installed normally via npm/npx, not bundled). Separately,bun run build:binarycompiles a standalone binary for your current OS only (dist/squidex-mcp);bun run build:binary:allcross-compiles all five release targets at once (dist/squidex-mcp-<platform>) — the same commandrelease.ymlruns when a tag is pushed.

docker-compose.ymlruns a local Squidex + MongoDB for real (non-mocked) testing:

docker compose up -d # starts Squidex on http://localhost:8085 bun run scripts/e2e-bootstrap.ts # creates a "mcp-test" app + "posts" schema, writes squidex.config.json bun run scripts/smoke.ts # or drive the tools directly via an MCP client

e2e-bootstrap.tsis idempotent — safe to re-run against an already-bootstrapped instance. It authenticates as therootsuperadmin client (created viaIDENTITY__ADMINCLIENTID/IDENTITY__ADMINCLIENTSECRETindocker-compose.yml, dev-only credentials, not real secrets) and writes alocalprofile intosquidex.config.json.

docker compose downstops it; add-vto also wipe the Mongo volume (fresh Squidex on nextup).

Pushing a tag matchingv..triggers.github/workflows/release.yml: it runs the test suite, publishes the package to npm, cross-compiles standalone binaries for Linux/macOS/Windows, and attaches them to a GitHub Release.

Publishing to npm usesTrusted Publishing(OIDC) — no token/secret needed. One-time setup: publish the first version manually (npm login && npm publish --access public, since Trusted Publisher configuration requires the package to already exist), then on the package's npmjs.com settings add a Trusted Publisher pointing at this repo (francyfox/squidex-mcp) and workflow file (release.yml). After that, every tag push publishes automatically.

This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.

Manage and utilize website content within the DevHub CMS platform

A server for integrating with WordPress sites, enabling content management and interaction via the Model Context Protocol.

An MCP server for WordPress and Elementor, enabling AI assistants to manage content and build pages.

Model Context Protocol (MCP) server for Kinsta WordPress hosting

An MCP server for integrating with and managing WordPress sites.

MCP server for WordPress: connect Claude, ChatGPT, Cursor, and other AI clients to manage content, edit themes, run WP-CLI, and automate self-hosted WordPress sites.

Agency-grade MCP server for WordPress Elementor — multi-site fleet management, safe page/widget-level editing, template export/import, version tracking with snapshot/rollback.

Perform CRUD operations on Elementor page data for a target WordPress website.

Connect Cursor, Claude Code, or any MCP-compatible tool directly to your ElmapiCMS instance. Manage collections, content, and assets through natural language.

Manage WordPress posts and upload images directly from file paths.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.