From 535b6690dd6c60a7ce36bdbe561257592d096c74 Mon Sep 17 00:00:00 2001 From: Vlad <2430296+mrcasual@users.noreply.github.com> Date: Thu, 20 Aug 2026 19:51:20 -0400 Subject: [PATCH 1/4] Bump version to 2.2.1 & update changelog --- package.json | 2 +- .../gk-block-mcp/gk-block-mcp.php | 4 ++-- wordpress-plugin/gk-block-mcp/readme.txt | 23 ++++++++++++------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 921712a..716d2a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gravitykit/block-mcp", - "version": "2.2.0", + "version": "2.2.1", "description": "MCP server for WordPress block-level content management with preference-aware editing", "main": "dist/index.cjs", "bin": { diff --git a/wordpress-plugin/gk-block-mcp/gk-block-mcp.php b/wordpress-plugin/gk-block-mcp/gk-block-mcp.php index 056b8bc..9e41e0b 100644 --- a/wordpress-plugin/gk-block-mcp/gk-block-mcp.php +++ b/wordpress-plugin/gk-block-mcp/gk-block-mcp.php @@ -3,7 +3,7 @@ * Plugin Name: Block MCP by GravityKit * Plugin URI: https://www.gravitykit.com/wordpress-block-mcp/ * Description: Lets an AI assistant (Claude, Cursor) safely create and edit your WordPress content over the Model Context Protocol (MCP). - * Version: 2.2.0 + * Version: 2.2.1 * Author: GravityKit * Author URI: https://www.gravitykit.com * License: GPL-2.0-or-later @@ -35,7 +35,7 @@ } } -define( 'GK_BLOCK_MCP_VERSION', '2.2.0' ); +define( 'GK_BLOCK_MCP_VERSION', '2.2.1' ); define( 'GK_BLOCK_MCP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'GK_BLOCK_MCP_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); diff --git a/wordpress-plugin/gk-block-mcp/readme.txt b/wordpress-plugin/gk-block-mcp/readme.txt index d9b97c3..201ea76 100644 --- a/wordpress-plugin/gk-block-mcp/readme.txt +++ b/wordpress-plugin/gk-block-mcp/readme.txt @@ -2,9 +2,9 @@ Contributors: gravitykit, katzwebservices Tags: blocks, rest-api, gutenberg, mcp, ai Requires at least: 6.0 -Tested up to: 7.0.4 +Tested up to: 7.1 Requires PHP: 7.4 -Stable tag: 2.2.0 +Stable tag: 2.2.1 License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -120,15 +120,22 @@ Visit Settings → Block MCP. Set the score for a namespace to less than 10 to m == Changelog == -= develop = += 2.2.1 on August 20, 2026 = -#### 🐛 Fixed +This release stops a damaged install from breaking the WordPress admin, fixes the Claude Desktop installer download being corrupted by output from other plugins, and corrects code block fonts and empty lists written by the assistant. -* A damaged plugin install no longer breaks the WordPress admin. If one of the plugin's files goes missing or is emptied, every admin page returned a critical error and WordPress emailed a recovery link. Now the rest of the admin keeps loading, and a notice explains that part of Block MCP could not be loaded and that reinstalling usually fixes it. -* Changing a code block's font through the assistant updated the setting but left the displayed code unchanged. -* Existing code blocks whose font was saved without a fallback could display in the browser's default serif instead of a monospace face. +#### 🐛 Fixed +* A missing or emptied plugin file made every admin page return a critical error and triggered a WordPress recovery email — the admin now keeps loading, with a notice explaining that part of Block MCP could not be loaded and that reinstalling usually fixes it. +* Issues with the Claude Desktop installer download: + - Stray output from another plugin or theme — even a single blank line left after a closing PHP tag — was prepended to the file, so Claude Desktop rejected it with "Failed to preview extension"; + - A download that could not be repaired produced a broken file with no explanation, and left behind the connection it had created along with its unused password. +* Code block font issues: + - Changing a code block's font through the assistant updated the setting but left the displayed code unchanged; + - Existing code blocks whose font was saved without a fallback could display in the browser's default serif instead of a monospace face. * A list written by the assistant could show up empty on the site and as invalid in the editor, even though its items were saved. -* The Claude Desktop installer no longer downloads damaged when another plugin or theme prints stray output in the admin. Even a single blank line — the kind left after a closing PHP tag in a theme file — ended up at the front of the file, and Claude Desktop rejected it with "Failed to preview extension". The installer download now captures that output from the moment the plugin loads and discards it before sending the file, so the installer arrives intact even when the theme, or a plugin loading after it, is printing on every request. In the rare case where the output has already reached the browser and can no longer be taken back, you get an explanation naming the cause instead of a file that will not open, and the connection created for that download is removed so it does not leave an unused password behind. + +#### 💻 Developer Updates +* Output buffering now starts when the plugin loads and is discarded before the installer file is sent, so stray output from earlier-loading plugins and themes cannot corrupt the download. = 2.2.0 on July 23, 2026 = From bfc9e5513664d875879ef9daeac05dd289b8b3f0 Mon Sep 17 00:00:00 2001 From: Vlad <2430296+mrcasual@users.noreply.github.com> Date: Thu, 20 Aug 2026 20:01:32 -0400 Subject: [PATCH 2/4] Update bundled server handshake version to 2.2.1 --- wordpress-plugin/gk-block-mcp/assets/mcp-server/index.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wordpress-plugin/gk-block-mcp/assets/mcp-server/index.cjs b/wordpress-plugin/gk-block-mcp/assets/mcp-server/index.cjs index 3fd18f8..da72b4b 100755 --- a/wordpress-plugin/gk-block-mcp/assets/mcp-server/index.cjs +++ b/wordpress-plugin/gk-block-mcp/assets/mcp-server/index.cjs @@ -35215,7 +35215,7 @@ var StdioServerTransport = class { // package.json var package_default = { name: "@gravitykit/block-mcp", - version: "2.2.0", + version: "2.2.1", description: "MCP server for WordPress block-level content management with preference-aware editing", main: "dist/index.cjs", bin: { From 16e31b2efb4df4180037877c96f33a882e488bc8 Mon Sep 17 00:00:00 2001 From: Vlad <2430296+mrcasual@users.noreply.github.com> Date: Thu, 20 Aug 2026 20:18:57 -0400 Subject: [PATCH 3/4] ci: rebuild vendor_prefixed when the vendor cache hits The Tests workflow skips composer install when vendor/ is restored from cache, which also skips the post-install hook that builds vendor_prefixed/ with strauss and patches it. tests/bootstrap-wp.php requires the prefixed Foundation Output helper, so every cache-hit run fataled at bootstrap. Run both scripts on that path, in the same order the install path does. --- .github/workflows/tests.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6ce6752..bfad541 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -77,6 +77,22 @@ jobs: COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.FOUNDATION_REPO_TOKEN }}"}}' run: composer install --prefer-dist --no-progress --no-interaction + # composer install builds vendor_prefixed/ through its post-install + # hook: strauss copies the prefixed Foundation out of vendor/, then + # composer_post_update_install.sh patches what strauss produced. When + # vendor/ comes from cache that hook never fires, and vendor_prefixed/ + # is gitignored and not cached, so the prefixed Foundation helper + # tests/bootstrap-wp.php requires is absent and every test fatals at + # bootstrap. Rebuild it here the way the install path does. The two + # scripts stay paired in this order: strauss regenerates the exact + # files the patch script edits, so running either alone leaves + # vendor_prefixed/ in a state the install path never produces. + - name: Rebuild the prefixed vendor directory + if: steps.vendor-cache.outputs.cache-hit == 'true' + run: | + composer run-script prefix_vendor + composer run-script post_update_install + # composer post-install runs the SQLite installer only on a fresh # install; if vendor/ came from cache, re-run it explicitly so # both paths produce an identical state. From 16ac96489e9307c5bbe46737d180b656f39ce274 Mon Sep 17 00:00:00 2001 From: Vlad <2430296+mrcasual@users.noreply.github.com> Date: Thu, 20 Aug 2026 20:59:19 -0400 Subject: [PATCH 4/4] build: ship only Foundation's runtime files in vendor_prefixed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Strauss 0.27 copies the whole package directory, and the release build installs Foundation from git source, where .gitattributes export-ignore does not apply — so the plugin shipped Foundation's UI sources, docs, CI config and build tooling. Exclude them from the copy, leaving src/, assets/, foundation.php and LICENSE. --- wordpress-plugin/gk-block-mcp/composer.json | 6 ++++-- wordpress-plugin/gk-block-mcp/composer.lock | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/wordpress-plugin/gk-block-mcp/composer.json b/wordpress-plugin/gk-block-mcp/composer.json index 5d25628..ff3c29c 100644 --- a/wordpress-plugin/gk-block-mcp/composer.json +++ b/wordpress-plugin/gk-block-mcp/composer.json @@ -1,6 +1,6 @@ { "name": "gravitykit/gk-block-mcp", - "description": "GravityKit Block API — WordPress plugin exposing block-level REST endpoints.", + "description": "GravityKit Block API \u2014 WordPress plugin exposing block-level REST endpoints.", "type": "wordpress-plugin", "license": "GPL-2.0-or-later", "minimum-stability": "dev", @@ -141,7 +141,9 @@ "woocommerce/action-scheduler" ], "file_patterns": [ - "#gravitykit/foundation/phpstan/#" + "#gravitykit/foundation/(UI|docs|tools|tests|scripts|phpstan|js-translations-extractor)/#", + "#gravitykit/foundation/\\.[^/]+#", + "#gravitykit/foundation/[^/]+\\.(md|json|js|sh|xml|dist|lock)$#" ] } } diff --git a/wordpress-plugin/gk-block-mcp/composer.lock b/wordpress-plugin/gk-block-mcp/composer.lock index 6d2c299..cf501bf 100644 --- a/wordpress-plugin/gk-block-mcp/composer.lock +++ b/wordpress-plugin/gk-block-mcp/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c2f67398f532cb6319bdf0d4062a2628", + "content-hash": "12f8b6cb90ed29cbb5876f86883efab6", "packages": [ { "name": "doctrine/inflector",