Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
254d671
MCP + Abilities API: Registration Framework
n7studios Apr 20, 2026
6e52159
Remove block abilities
n7studios Apr 20, 2026
1b4a5be
Remove block helpers
n7studios Apr 20, 2026
fd2b520
Abillities API: Block Framework
n7studios Apr 20, 2026
a0ff1b0
Include block framework classes
n7studios Apr 20, 2026
f876f5d
Set `get_category` to not be abstract
n7studios Apr 20, 2026
a4f501f
Fetch input schema from block fields/attributes
n7studios Apr 20, 2026
afa1e7e
Register Form Insertion Ability
n7studios Apr 20, 2026
1c5b9c3
Abilities: Prefix with `block-`
n7studios Apr 20, 2026
db3eec1
Insert Block: Use `index`
n7studios Apr 20, 2026
5b32fce
Merge branch 'main' into abilities-api
n7studios Apr 23, 2026
89968ba
Merge branch 'abilities-api' into abilities-api-block-framework
n7studios Apr 23, 2026
bf522cc
Use ConvertKit_Block_Post_Helper class
n7studios Apr 23, 2026
3ed5446
Fix static method arguments
n7studios Apr 23, 2026
fc4d1ed
Simplify block post helper method
n7studios Apr 23, 2026
63042f1
Move annotations to higher classes
n7studios Apr 23, 2026
a3d689e
Simplify input/output schema
n7studios Apr 23, 2026
81b58e3
Register all block abilities and set correct parameters
n7studios Apr 23, 2026
0fadf1c
Tidy up comments
n7studios Apr 23, 2026
6aa6dcc
Add annotations as class properties
n7studios Apr 23, 2026
e636b9d
Merge branch 'abilities-api' into abilities-api-block-framework
n7studios Apr 23, 2026
fc41b67
Merge branch 'main' into abilities-api
n7studios May 5, 2026
96a704d
Merge branch 'abilities-api' into abilities-api-block-framework
n7studios May 5, 2026
5f362a2
Added MCP Server Tests
n7studios May 8, 2026
8e37e2e
Load MCP Adapter as Composer Dependency
n7studios May 8, 2026
d1ecb12
Load WordPress MCP Adapter directly
n7studios May 8, 2026
f9e6af2
Initialize MCP Adapter
n7studios May 8, 2026
bab16d0
Fix Coding Standards + MCP Adapter on PHP 7.2 + 7.3
n7studios May 8, 2026
94830d8
Use McpAdapter::instance() to initialize the MCP Adapter
n7studios May 8, 2026
4c9682f
Coding standards
n7studios May 8, 2026
7799dc4
MCP Adapter: Only load if Abilities API exists and PHP 7.4+ is used
n7studios May 8, 2026
1caa36b
Coding Standards: Don’t generate `vendor/composer/platform_check.php`…
n7studios May 8, 2026
b3208cc
Revert platform-check changes
n7studios May 8, 2026
e462e24
Coding Standards: Remove `wordpress/mcp-adapter` on PHP 7.2 and 7.3
n7studios May 8, 2026
2777e8e
Merge branch 'abilities-api' into abilities-api-block-framework
n7studios May 8, 2026
abc0dd8
Merge remote-tracking branch 'origin/tests-fix-php-8.3' into abilitie…
n7studios May 11, 2026
4798b1e
Coding standards: Remove wordpress/mcp-adapter on PHP 7.2 + 7.3
n7studios May 11, 2026
2b93768
Coding standards: Use `jq` to remove wordpress/mcp-adapter
n7studios May 11, 2026
dc1cadf
PHPStan compat.
n7studios May 11, 2026
6b9e930
Merge branch 'main' into abilities-api
n7studios May 12, 2026
fb9e790
Reinstate jq command
n7studios May 12, 2026
f72942e
Merge branch 'abilities-api' into abilities-api-block-framework
n7studios May 15, 2026
f0ab76b
Abilites API: Block Post Helper
n7studios May 15, 2026
246fe7c
Started tests
n7studios May 15, 2026
4dab466
Completed tests
n7studios May 15, 2026
a8a442b
PHPStan compat.
n7studios May 15, 2026
678d681
Merge remote-tracking branch 'origin/abilities-api-block-post-helper'…
n7studios May 15, 2026
fcd156f
Remove block post helper class
n7studios May 15, 2026
c618f4f
PHPStan compat.
n7studios May 15, 2026
e558396
Coding standards
n7studios May 15, 2026
8a26dbc
Merge branch 'abilities-api-block-post-helper' into abilities-api-blo…
n7studios May 15, 2026
479a65a
Merge pull request #1096 from Kit/abilities-api-block-framework
n7studios May 19, 2026
97739da
Merge pull request #1095 from Kit/abilities-api-block-post-helper
n7studios May 19, 2026
2cf2bee
Merge branch 'main' into abilities-api
n7studios May 21, 2026
ae23c8f
Abilities API: Restructure Content Helper
n7studios May 25, 2026
9ac58dc
PHPStan compat.
n7studios May 25, 2026
3101d8a
Abilities API: Shortcode Support
n7studios May 25, 2026
f3829e6
Rename ‘feature’ to ‘element’ to be consistent with other code
n7studios May 25, 2026
f4df497
Merge branch 'abilities-api-restructure' into abilities-api-content-s…
n7studios May 25, 2026
95ad6bf
Add shortcode support
n7studios May 25, 2026
dfe298f
Started test
n7studios May 25, 2026
3e610b3
Fix $feature_name
n7studios May 25, 2026
912fc4d
Split by element, not paragraph
n7studios May 25, 2026
b74fc32
Remove unused ‘index’
n7studios May 25, 2026
60068bd
Completed tests
n7studios May 25, 2026
a487474
Coding standards
n7studios May 25, 2026
964140c
Fix test
n7studios May 25, 2026
bbc967b
Abilities API: Enable MCP Server Setting
n7studios May 25, 2026
3a6d93b
Added tests
n7studios May 25, 2026
c9233ae
Conditionally load MCP Server and Abilities
n7studios May 25, 2026
fa3d7bf
PHPStan compat.
n7studios May 25, 2026
e54decb
Merge branch 'abilities-api-content-shortcode-support' into abilities…
n7studios May 25, 2026
b8d137a
Completed tests
n7studios May 25, 2026
6a9ff89
Remove MCP unit test
n7studios May 25, 2026
c2c9044
Change URL to kit/mcp/v1; surface URL to use in AI clients
n7studios May 25, 2026
33aa917
PHPStan compat.
n7studios May 25, 2026
6cd8073
Fix test
n7studios May 27, 2026
d0d1024
Register Forms as MCP Tools
n7studios May 27, 2026
12f7a5c
Abilities API: Register Resources
n7studios May 27, 2026
c4fd0ea
Started tests
n7studios May 27, 2026
14630e1
Completed tests
n7studios May 27, 2026
1efc168
Test abilities are registered
n7studios May 27, 2026
c4fd5af
Merge branch 'abilities-api-resources' into abilities-api-forms
n7studios May 27, 2026
72f0b0b
Added tests
n7studios May 27, 2026
235a395
Coding standards
n7studios May 27, 2026
ca02a23
Improve testing
n7studios May 27, 2026
d9f7431
Improve testing
n7studios May 27, 2026
58aad34
Merge remote-tracking branch 'origin/abilities-api-resources' into ab…
n7studios May 27, 2026
ef4685b
Fix test
n7studios May 28, 2026
020ba73
Merge remote-tracking branch 'origin/abilities-api-resources' into ab…
n7studios May 28, 2026
3560d82
Abilities API: Form Triggers
n7studios May 28, 2026
5b15fd2
Abilities API: Broadcasts
n7studios May 28, 2026
23f60a9
Abilites API: Products
n7studios May 28, 2026
c5baaca
Return WP_Error or array on find() methods
n7studios Jun 8, 2026
14abc71
Merge branch 'abilities-api-restructure' into abilities-api-content-s…
n7studios Jun 8, 2026
3e91dd7
Parse using WP_HTML_Tag_Processor where available
n7studios Jun 8, 2026
7d72678
Use WP_HTML_Tag_Processor if available
n7studios Jun 9, 2026
7bf6602
Merge pull request #1099 from Kit/abilities-api-restructure
n7studios Jun 11, 2026
b062616
Merge remote-tracking branch 'origin/abilities-api' into abilities-ap…
n7studios Jun 11, 2026
7674ef4
Fix test
n7studios Jun 11, 2026
0285654
Integration Tests: Check content is updated correctly
n7studios Jun 17, 2026
3655fb2
Updated integration tests for block post helper
n7studios Jun 17, 2026
8a425e2
PHPStan compat.
n7studios Jun 17, 2026
57da7db
Merge branch 'abilities-api-forms' into abilities-api-form-triggers
n7studios Jun 17, 2026
6111087
Merge branch 'abilities-api-form-triggers' into abilities-api-broadcasts
n7studios Jun 17, 2026
616ef4a
Merge branch 'abilities-api-broadcasts' into abilities-api-products
n7studios Jun 17, 2026
8579b93
Return `string` type as default and for text, color and select fields
n7studios Jun 18, 2026
a2b8dd4
Merge pull request #1111 from Kit/abilities-api-products
n7studios Jun 22, 2026
7a2dedd
Merge pull request #1106 from Kit/abilities-api-broadcasts
n7studios Jun 22, 2026
d2f93d8
Merge pull request #1105 from Kit/abilities-api-form-triggers
n7studios Jun 22, 2026
7d339d4
Merge pull request #1104 from Kit/abilities-api-forms
n7studios Jun 22, 2026
0b37207
Merge pull request #1103 from Kit/abilities-api-resources
n7studios Jun 22, 2026
b77d9f4
Merge pull request #1101 from Kit/abilities-api-enable-mcp
n7studios Jun 22, 2026
9e7123b
Merge pull request #1100 from Kit/abilities-api-content-shortcode-sup…
n7studios Jun 22, 2026
4d03623
Merge branch 'main' into abilities-api
n7studios Jun 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .distignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
/node_modules
/resources/frontend/css/*.map
/tests
/vendor/autoload.php
/vendor/composer
/vendor/convertkit/convertkit-wordpress-libraries/.git
/vendor/convertkit/convertkit-wordpress-libraries/.github
/vendor/convertkit/convertkit-wordpress-libraries/tests
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/coding-standards.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,12 @@ jobs:
tools: cs2pr

# Installs wp-browser, Codeception, PHP CodeSniffer and anything else needed to run tests.
# jq is used to remove the wordpress/mcp-adapter package from composer.json, as it requires PHP 7.4+.
- name: Run Composer
working-directory: ${{ env.PLUGIN_DIR }}
run: composer update
run: |
jq 'del(.require."wordpress/mcp-adapter")' composer.json > composer.json.tmp && mv composer.json.tmp composer.json
composer update

# Installs WordPress scripts for CSS and JS Coding Standards.
- name: Run npm install
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,13 @@ jobs:
"resources/frontend/css/frontend.css"
"resources/frontend/js/dist/frontend.min.asset.php"
"resources/frontend/js/dist/frontend.min.js"
"vendor/autoload.php"
"vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-api-traits.php"
"vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-api-v4.php"
"vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-log.php"
"vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-resource-v4.php"
"vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-review-request.php"
"vendor/wordpress/mcp-adapter/mcp-adapter.php"
)

for file in "${files[@]}"; do
Expand Down
2 changes: 0 additions & 2 deletions .scripts/create-plugin-zip.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,9 @@ zip -r convertkit.zip . \
-x ".wordpress-org/*" \
-x "log/*" \
-x "tests/*" \
-x "vendor/composer/*" \
-x "vendor/convertkit/convertkit-wordpress-libraries/.github" \
-x "vendor/convertkit/convertkit-wordpress-libraries/tests/*" \
-x "vendor/convertkit/convertkit-wordpress-libraries/composer.json" \
-x "vendor/autoload.php" \
-x "*.distignore" \
-x "*.env.*" \
-x ".gitignore" \
Expand Down
2 changes: 1 addition & 1 deletion admin/section/class-convertkit-admin-section-base.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ abstract class ConvertKit_Admin_Section_Base {
*
* @since 1.9.6
*
* @var false|ConvertKit_Settings|ConvertKit_ContactForm7_Settings|ConvertKit_Wishlist_Settings|ConvertKit_Settings_Restrict_Content|ConvertKit_Settings_Broadcasts|ConvertKit_Forminator_Settings
* @var false|ConvertKit_Settings|ConvertKit_ContactForm7_Settings|ConvertKit_Wishlist_Settings|ConvertKit_Settings_Restrict_Content|ConvertKit_Settings_Broadcasts|ConvertKit_Forminator_Settings|ConvertKit_Settings_MCP
*/
public $settings;

Expand Down
176 changes: 176 additions & 0 deletions admin/section/class-convertkit-admin-section-mcp.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
<?php
/**
* ConvertKit Settings MCP Settings class.
*
* @package ConvertKit
* @author ConvertKit
*/

/**
* Registers MCP Settings that can be edited at Settings > Kit > MCP.
*
* @package ConvertKit
* @author ConvertKit
*/
class ConvertKit_Admin_Section_MCP extends ConvertKit_Admin_Section_Base {

/**
* Constructor.
*
* @since 3.4.0
*/
public function __construct() {

// Define the class that reads/writes settings.
$this->settings = new ConvertKit_Settings_MCP();

// Define the settings key.
$this->settings_key = $this->settings::SETTINGS_NAME;

// Define the programmatic name, Title and Tab Text.
$this->name = 'mcp';
$this->title = __( 'MCP', 'convertkit' );
$this->tab_text = __( 'MCP', 'convertkit' );

// Identify that this is beta functionality.
$this->is_beta = true;

// Define settings sections.
$this->settings_sections = array(
'general' => array(
'title' => $this->title,
'callback' => array( $this, 'print_section_info' ),
'wrap' => true,
),
);

// Register and maybe output notices for this settings screen, and the Intercom messenger.
if ( $this->on_settings_screen( $this->name ) ) {
add_action( 'convertkit_settings_base_render_before', array( $this, 'maybe_output_notices' ) );
}

// Enqueue scripts and CSS.
add_action( 'convertkit_admin_settings_enqueue_scripts', array( $this, 'enqueue_scripts' ) );

parent::__construct();

}

/**
* Enqueues scripts for the Settings > MCP screen.
*
* @since 3.4.0
*
* @param string $section Settings section / tab (general|tools|restrict-content|broadcasts|mcp).
*/
public function enqueue_scripts( $section ) {

// Bail if we're not on the MCP section.
if ( $section !== $this->name ) {
return;
}

// Enqueue JS.
wp_enqueue_script( 'convertkit-admin-settings-conditional-display', CONVERTKIT_PLUGIN_URL . 'resources/backend/js/settings-conditional-display.js', array( 'jquery' ), CONVERTKIT_PLUGIN_VERSION, true );

}

/**
* Registers settings fields for this section.
*
* @since 3.4.0
*/
public function register_fields() {

// Enable.
add_settings_field(
'enabled',
__( 'Enable MCP Server', 'convertkit' ),
array( $this, 'enabled_callback' ),
$this->settings_key,
$this->name,
array(
'name' => 'enabled',
'label_for' => 'enabled',
'label' => __( 'When enabled, allows AI clients to connect to the Kit Plugin using MCP.', 'convertkit' ),
'description' => sprintf(
'%s<br /><code>%s</code>',
__( 'Go to your AI tool to add a custom connector by pasting this URL to connect to this plugin:', 'convertkit' ),
get_site_url() . '/wp-json/kit/mcp/v1'
),
)
);

}

/**
* Prints help info for this section
*
* @since 3.4.0
*/
public function print_section_info() {

?>
<span class="convertkit-beta-label"><?php esc_html_e( 'Beta', 'convertkit' ); ?></span>
<p class="description"><?php esc_html_e( 'Defines whether AI clients can connect to the Kit Plugin using MCP.', 'convertkit' ); ?></p>
<?php

}


/**
* Returns the URL for the ConvertKit documentation for this setting section.
*
* @since 3.4.0
*
* @return string Documentation URL.
*/
public function documentation_url() {

return '#';

}

/**
* Renders the input for the Enable setting.
*
* @since 3.4.0
*
* @param array $args Setting field arguments (name,description).
*/
public function enabled_callback( $args ) {

// Output field.
$this->output_checkbox_field(
$args['name'],
'on',
$this->settings->enabled(),
$args['label'],
$args['description'],
array( 'convertkit-conditional-display' )
);

}

}

// Bootstrap.
add_filter(
'convertkit_admin_settings_register_sections',
function ( $sections ) {

// Don't register the MCP section if the Abilities API is not available (WordPress < 6.9).
if ( ! function_exists( 'wp_register_ability' ) ) {
return $sections;
}

// Don't register the MCP section if PHP 7.4+ is not installed.
if ( version_compare( PHP_VERSION, '7.4', '<' ) ) {
return $sections;
}

$sections['mcp'] = new ConvertKit_Admin_Section_MCP();
return $sections;

}
);
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"type": "project",
"license": "GPLv3",
"require": {
"convertkit/convertkit-wordpress-libraries": "2.1.6"
"convertkit/convertkit-wordpress-libraries": "2.1.6",
"wordpress/mcp-adapter": "^0.5.0"
},
"require-dev": {
"php-webdriver/webdriver": "^1.0",
Expand Down
16 changes: 16 additions & 0 deletions includes/blocks/class-convertkit-block-broadcasts.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ public function __construct() {
// Register this as a Gutenberg block in the ConvertKit Plugin.
add_filter( 'convertkit_blocks', array( $this, 'register' ) );

// Register this block's MCP abilities.
add_filter( 'convertkit_abilities', array( $this, 'register_abilities' ) );

// Enqueue scripts and styles for this Gutenberg Block in the editor and frontend views.
add_action( 'convertkit_gutenberg_enqueue_scripts_editor_and_frontend', array( $this, 'enqueue_scripts' ) );
add_action( 'convertkit_gutenberg_enqueue_styles_editor_and_frontend', array( $this, 'enqueue_styles' ) );
Expand Down Expand Up @@ -171,6 +174,19 @@ public function get_title() {

}

/**
* Returns this block's plural title.
*
* @since 3.4.0
*
* @return string
*/
public function get_title_plural() {

return __( 'Kit Broadcasts', 'convertkit' );

}

/**
* Returns this block's icon.
*
Expand Down
16 changes: 16 additions & 0 deletions includes/blocks/class-convertkit-block-form-trigger.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ public function __construct() {
// Register this as a Gutenberg block in the ConvertKit Plugin.
add_filter( 'convertkit_blocks', array( $this, 'register' ) );

// Register this block's MCP abilities.
add_filter( 'convertkit_abilities', array( $this, 'register_abilities' ) );

// Enqueue scripts and styles for this Gutenberg Block in the editor and frontend views.
add_action( 'convertkit_gutenberg_enqueue_styles_editor_and_frontend', array( $this, 'enqueue_styles' ) );

Expand Down Expand Up @@ -73,6 +76,19 @@ public function get_title() {

}

/**
* Returns this block's plural title.
*
* @since 3.4.0
*
* @return string
*/
public function get_title_plural() {

return __( 'Kit Form Triggers', 'convertkit' );

}

/**
* Returns this block's icon.
*
Expand Down
16 changes: 16 additions & 0 deletions includes/blocks/class-convertkit-block-form.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ public function __construct() {
// Register this as a Gutenberg block in the ConvertKit Plugin.
add_filter( 'convertkit_blocks', array( $this, 'register' ) );

// Register this block's MCP abilities.
add_filter( 'convertkit_abilities', array( $this, 'register_abilities' ) );

// Enqueue scripts for this Gutenberg Block in the editor view.
add_action( 'convertkit_gutenberg_enqueue_scripts', array( $this, 'enqueue_scripts_editor' ) );

Expand Down Expand Up @@ -101,6 +104,19 @@ public function get_title() {

}

/**
* Returns this block's plural title.
*
* @since 3.4.0
*
* @return string
*/
public function get_title_plural() {

return __( 'Kit Forms', 'convertkit' );

}

/**
* Returns this block's icon.
*
Expand Down
16 changes: 16 additions & 0 deletions includes/blocks/class-convertkit-block-product.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ public function __construct() {
// Register this as a Gutenberg block in the ConvertKit Plugin.
add_filter( 'convertkit_blocks', array( $this, 'register' ) );

// Register this block's MCP abilities.
add_filter( 'convertkit_abilities', array( $this, 'register_abilities' ) );

// Enqueue scripts and styles for this Gutenberg Block in the editor and frontend views.
add_action( 'convertkit_gutenberg_enqueue_scripts_editor_and_frontend', array( $this, 'enqueue_scripts' ) );
add_action( 'convertkit_gutenberg_enqueue_styles_editor_and_frontend', array( $this, 'enqueue_styles' ) );
Expand Down Expand Up @@ -95,6 +98,19 @@ public function get_title() {

}

/**
* Returns this block's plural title.
*
* @since 3.4.0
*
* @return string
*/
public function get_title_plural() {

return __( 'Kit Products', 'convertkit' );

}

/**
* Returns this block's icon.
*
Expand Down
Loading