Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
3101d8a
Abilities API: Shortcode Support
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
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
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
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: 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;

}
);
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
21 changes: 17 additions & 4 deletions includes/blocks/class-convertkit-block.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ public function register_abilities( $abilities ) {
return array_merge(
$abilities,
array(
new ConvertKit_MCP_Ability_Content_List( $this ),
new ConvertKit_MCP_Ability_Content_Insert( $this ),
new ConvertKit_MCP_Ability_Content_Update( $this ),
new ConvertKit_MCP_Ability_Content_Delete( $this ),
'kit/' . $this->get_name() . '-list' => new ConvertKit_MCP_Ability_Content_List( $this ),
'kit/' . $this->get_name() . '-insert' => new ConvertKit_MCP_Ability_Content_Insert( $this ),
'kit/' . $this->get_name() . '-update' => new ConvertKit_MCP_Ability_Content_Update( $this ),
'kit/' . $this->get_name() . '-delete' => new ConvertKit_MCP_Ability_Content_Delete( $this ),
)
);

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

}

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

return '';

}

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