# Concrete CMS MCP server

**URL:** https://forums.concretecms.org/t/concrete-cms-mcp-server/9680
**Category:** Community Talk
**Created:** [December 26, 2025, 6:07am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680 "2025-12-26T06:07:42Z")
**Posts on this page:** 14
**Page:** 1

<div class="post-metadata">

### Author: ![hissy](https://forums.concretecms.org/user_avatar/forums.concretecms.org/hissy/32/5107_2.png) [@hissy](https://forums.concretecms.org/u/hissy)
#### Post date: [December 26, 2025, 6:07am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/1 "2025-12-26T06:07:42Z")

</div>

Hello community!

- Want to publish blog posts to Concrete CMS directly from Claude?
- Want to let an AI agent suggest improvements to the content on your Concrete CMS site?

If you’ve ever thought “It would be great if AI could just talk to my CMS” –  
that’s exactly what an MCP server for Concrete CMS is for.

I’ve built one and released it as open source under the MIT License 🚀  
Feel free to try it out, experiment, and see what kinds of workflows you can unlock.

Feedback, ideas, and contributions are more than welcome.  
Hope it’s helpful to make your life easier!

> **[GitHub - MacareuxDigital/concretecms-mcp-server: A Model Context Protocol (MCP) server that...](https://github.com/MacareuxDigital/concretecms-mcp-server)**
>
> A Model Context Protocol (MCP) server that integrates with Concrete CMS's REST API.

Japanese blog post:

> **[Concrete CMSと生成AIをつなぐMCPサーバーを公開しました](https://macareux.co.jp/blog/concretecms-mcp-server)**

---

<div class="post-metadata">

### Author: ![katalysis](https://forums.concretecms.org/user_avatar/forums.concretecms.org/katalysis/32/5562_2.png) [@katalysis](https://forums.concretecms.org/u/katalysis)
#### Post date: [March 25, 2026, 2:11pm UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/2 "2026-03-25T14:11:34Z")

</div>

I used this for the first time this week.

It enabled Claude to quickly provide a long list of .htaccess redirects for an updated site when compared to the indexed pages from Google Search Console.

Lots of time saved – what a useful tool! Looking forward to exploring it further - thank you @hissy

---

<div class="post-metadata">

### Author: ![hissy](https://forums.concretecms.org/user_avatar/forums.concretecms.org/hissy/32/5107_2.png) [@hissy](https://forums.concretecms.org/u/hissy)
#### Post date: [March 26, 2026, 11:36am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/3 "2026-03-26T11:36:35Z")

</div>

Wow, what an impressive use case!

---

<div class="post-metadata">

### Author: ![bcorner2026](https://forums.concretecms.org/user_avatar/forums.concretecms.org/bcorner2026/32/5178_2.png) [@bcorner2026](https://forums.concretecms.org/u/bcorner2026)
#### Post date: [June 15, 2026, 9:28am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/4 "2026-06-15T09:28:12Z")

</div>

Hey there @hissy — I’ve been trying out the concretecms-mcp-server and hit a wall on the build (`npm run build` fails with 17 TypeScript errors out of the box). I dug in, and it came down to a few small things, so I’ve put up two PRs against MacareuxDigital/concretecms-mcp-server:

#6 — Fix dependency vulnerabilities and resync lockfile: the committed `package-lock.json` is out of sync (so `npm ci` fails), and `npm audit` flagged 10 vulnerabilities (6 high, 4 moderate). This resyncs the lockfile and clears all of them — no changes to the declared dependencies.

#7 — Fix TypeScript build (17 errors) + add CI: adds the missing `@types/node`, fixes a `toolMode` → `toolsMode` config typo, tightens the env-var typing, and adds a GitHub Actions build (Node 20 / 22 / 24) so this kind of breakage gets caught automatically.

After both, `npm ci && npm run build` are green, and `npm audit` is clean.

Credit where due — @mlocati had already spotted the stale lockfile (#1) and proposed the `node:` import prefixes (#4) back in March; my PRs build on those findings. Would love a maintainer’s eyes on these when there’s a chance. Happy to

adjust anything.

---

<div class="post-metadata">

### Author: ![bcorner2026](https://forums.concretecms.org/user_avatar/forums.concretecms.org/bcorner2026/32/5178_2.png) [@bcorner2026](https://forums.concretecms.org/u/bcorner2026)
#### Post date: [June 15, 2026, 11:00am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/5 "2026-06-15T11:00:29Z")

</div>

thanks for the fast response! Now onto testing!

---

<div class="post-metadata">

### Author: ![hissy](https://forums.concretecms.org/user_avatar/forums.concretecms.org/hissy/32/5107_2.png) [@hissy](https://forums.concretecms.org/u/hissy)
#### Post date: [July 11, 2026, 9:53am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/6 "2026-07-11T09:53:27Z")

</div>

Great news! 🎉

The **Concrete CMS MCP Server** now supports **Streamable HTTP transport** in addition to the original **stdio transport**.

This is an important milestone because it means the MCP server is no longer limited to local development. With Streamable HTTP, it can now be deployed as a network service, making it suitable for production environments and remote AI clients.

If you’re interested in building AI assistants, AI-powered content workflows, or MCP integrations for Concrete CMS, now is a great time to give it a try.

As always, feedback, issues, and pull requests are very welcome!

---

<div class="post-metadata">

### Author: ![c5dragon](https://forums.concretecms.org/user_avatar/forums.concretecms.org/c5dragon/32/6152_2.png) [@c5dragon](https://forums.concretecms.org/u/c5dragon)
#### Post date: [July 15, 2026, 1:29pm UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/7 "2026-07-15T13:29:16Z")

</div>

Should have checked Trivago…🤣

Maybe read the docs once in a while.  
AI didn’t get me the right answer.

> <https://github.com/MacareuxDigital/concretecms-mcp-server/blob/main/docs/remote-server.md>

---

<div class="post-metadata">

### Author: ![hissy](https://forums.concretecms.org/user_avatar/forums.concretecms.org/hissy/32/5107_2.png) [@hissy](https://forums.concretecms.org/u/hissy)
#### Post date: [July 16, 2026, 12:15am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/8 "2026-07-16T00:15:50Z")

</div>

@c5dragon

If you want to use it from your local Claude Desktop, you can follow the “Connect your LLM to the local Concrete CMS MCP Server” section in the README.

> <https://github.com/MacareuxDigital/concretecms-mcp-server/blob/main/README.md#connect-your-llm-to-the-local-concrete-cms-mcp-server>

---

<div class="post-metadata">

### Author: ![c5dragon](https://forums.concretecms.org/user_avatar/forums.concretecms.org/c5dragon/32/6152_2.png) [@c5dragon](https://forums.concretecms.org/u/c5dragon)
#### Post date: [July 16, 2026, 11:46am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/9 "2026-07-16T11:46:22Z")

</div>

Works with (mcp local + claude desktop + remote website)  
Added the following in Redirect URI on the API page.

```auto
http://localhost:3000/callback

```

 ![Screenshot 2026-07-16 at 13.15.01](https://forums.concretecms.org/uploads/default/original/2X/b/b70a2b6319af08a6ab2d399c1188f6c56efc1dd6.png)

_Redacted screenshot info_

---

<div class="post-metadata">

### Author: ![c5dragon](https://forums.concretecms.org/user_avatar/forums.concretecms.org/c5dragon/32/6152_2.png) [@c5dragon](https://forums.concretecms.org/u/c5dragon)
#### Post date: [July 22, 2026, 10:40am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/10 "2026-07-22T10:40:38Z")

</div>

I’m trying to figure out how to upload files through (this) MCP.

Made (Codex made) a separate part which connects through the API directly.  
Connects as user which is allowed to upload.

---

<div class="post-metadata">

### Author: ![hissy](https://forums.concretecms.org/user_avatar/forums.concretecms.org/hissy/32/5107_2.png) [@hissy](https://forums.concretecms.org/u/hissy)
#### Post date: [July 23, 2026, 4:16am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/11 "2026-07-23T04:16:43Z")

</div>

👍 It seems your previous problem was related to the permission issue.

---

<div class="post-metadata">

### Author: ![c5dragon](https://forums.concretecms.org/user_avatar/forums.concretecms.org/c5dragon/32/6152_2.png) [@c5dragon](https://forums.concretecms.org/u/c5dragon)
#### Post date: [July 23, 2026, 7:11am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/12 "2026-07-23T07:11:29Z")

</div>

👍 The error was misleading, and got in the wrong rabbit hole.

For future reference:  
The REST controller executes this check:

```php
if (!$fp->canAddFileType(
    $cf->getExtension($uploadedFile->getClientOriginalName())
)) {
    return $this->error(
        Importer::getErrorMessage(Importer::E_FILE_INVALID_EXTENSION),
        403
    );
}

```

Therefore, 403: “Invalid file extension” actually means:

> The current API user is not permitted to add a `.jpg` file to this folder.

For this MCP the scope: `files:add files:update` is not enough.  
It needs a user to verify against. + the actual file. Claude corrupts the file.

Maybe somethings to add later in this MCP / Or allow the api to do this without the user?

---

<div class="post-metadata">

### Author: ![hissy](https://forums.concretecms.org/user_avatar/forums.concretecms.org/hissy/32/5107_2.png) [@hissy](https://forums.concretecms.org/u/hissy)
#### Post date: [July 23, 2026, 8:57am UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/13 "2026-07-23T08:57:43Z")

</div>

Good point, but that is a topic on the REST API side. I believe we have an issue to discuss about this, but I forgot the URL… 😅

---

<div class="post-metadata">

### Author: ![PixelFields](https://forums.concretecms.org/user_avatar/forums.concretecms.org/pixelfields/32/3569_2.png) [@PixelFields](https://forums.concretecms.org/u/PixelFields)
#### Post date: [September 30, 2026, 6:13pm UTC](https://forums.concretecms.org/t/concrete-cms-mcp-server/9680/14 "2026-09-30T18:13:52Z")

</div>

Finally got round to having a go with this because I wanted a test site for a pagelist block I’m working on and needed test pages created. Gave Claude the github link and it was able to take care of most of the installation apart from a few commands I had to copy/paste into a terminal and activating the API in the dashboard (it was able to walk me through it though).

Once that was ready, I asked Claude to create a page for every image in the file manager (uploaded myself because I’m not that lazy), attach the image as the thumbnail and populate a custom attribute with dummy data (a URL, again I added the custom attribute manually). So saved me about 6 clicks times 15 images/pages plus all the time micro loading in between but mostly the tedium of having to do it myself.

Thanks for this @hissy, very useful tool! ❤
