WPForms REST APIおよびAbilities APIリファレンス

WPForms 1.9.9 では WordPress Abilities API を基盤とした REST API が導入され、WPForms 1.10.2 ではオプトインの書き込みサポートが追加されました。フォームの一覧表示、フォーム設定の取得、エントリーの取得と検索、フォーム統計情報の取得が可能です。書き込みアクセスが有効になると、フォームの作成、フィールドの追加と更新、安全なフォーム設定の更新も行えます。すべての機能は、任意の HTTP クライアント、コマンドライン、独自の PHP コード、または Model Context Protocol (MCP) を話す AI アシスタントから利用できます。

「WPForms REST API」で検索してここにたどり着いた場合、それがこれです。個別の REST API は存在しません。Abilities API との統合が、WPForms が HTTP 経由でデータを公開する方法です。

Abilities API とは

Abilities API は、WordPress 6.9 で追加された WordPress コア機能です。プラグインは、名前、入力スキーマ、出力スキーマ、および権限コールバックを持つ個別の権限(abilities と呼ばれます)を宣言できます。WordPress は、登録されたすべての能力を REST API で /wp-json/wp-abilities/v1/abilities/<ability>/run で自動的に公開し、公式 MCP アダプタープラグインを通じて MCP 互換の AI クライアントにも公開します。

WPForms は wpforms/ 名前空間の下に一連の機能(abilities)を登録します。読み取り機能は WPForms 1.9.9 以降利用可能です。WPForms 1.10.2 では書き込み機能が追加されましたが、デフォルトでは無効になっています(下記 書き込みアクセスを有効にする を参照)。各機能は管理画面で使用されるのと同じ WPForms の権限チェック(wpforms_current_user_can())を実行するため、REST および MCP のインターフェースは、新しいモデルを導入するのではなく、既存の権限モデルを継承します。

要件:

  • WordPress 6.9 以降
  • 読み取り機能には WPForms Lite または Pro 1.9.9 以降、書き込み機能には 1.10.2 以降が必要です(一部の機能は Pro のみ利用可能。以下のリファレンステーブルを参照)。
  • MCP クライアントの場合: wordpress/mcp-adapter プラグイン

能力の呼び出し

各能力は 2 つのトランスポートを通じて呼び出すことができます。結果は同一ですので、呼び出し環境に適した方を選択してください。

REST API

認証されたリクエストを /wp-json/wp-abilities/v1/abilities/<ability>/run に送信します。HTTP メソッドは機能によって異なります。読み取り機能は GET を使用し、書き込み機能は POST を使用します。間違ったメソッドで機能を呼び出すと 405 Method Not Allowed が返されます。

注意: 読み取り機能(GET)は、input キーの下に角括弧で囲まれたクエリ文字列フィールドとしてパラメータを受け取ります。例: input[limit]=10&input[status]=publish。クライアントが自動的に行わない場合は、角括弧を URL エンコードしてください([ の場合は %5B] の場合は %5D)。書き込み機能(POST)は、リクエストボディの input キーの下に JSON オブジェクトとして同じパラメータを受け取ります。PHP トランスポートは両方を同じように処理します。execute() に連想配列を渡します。

curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/list-forms/run?input%5Blimit%5D=10&input%5Bstatus%5D=publish"

PHP

wp_abilities_api_init アクションが発火した後で実行される任意のプラグイン、テーマ、またはカスタムコードから、wp_get_ability() で能力を取得し、その execute() メソッドを呼び出します。入力は連想配列(各能力のパラメータ表に記載されているのと同じ名前)として渡します。

$ability = wp_get_ability( 'wpforms/list-forms' );

if ( $ability ) {
    $result = $ability->execute(
        [
            'limit'  => 10,
            'status' => 'publish',
        ]
    );

    if ( is_wp_error( $result ) ) {
        // Handle error.
        return;
    }

    // $result['forms']  array of form summaries
    // $result['total']  total count (integer)
}

認証

REST トランスポートは標準の WordPress 認証を使用します。外部クライアントに推奨される方法は、WordPress コアに組み込まれており、追加のプラグインを必要としないアプリケーションパスワードです。

アプリケーションパスワードの生成

  1. 呼び出しを実行する WordPress ユーザーとしてサインインします。
  2. ユーザー » プロフィール に移動し、アプリケーションパスワード セクションまでスクロールします。
  3. 統合の名前を入力し、新しいアプリケーションパスワードを追加をクリックします。
  4. 生成されたパスワードをコピーします。WordPressでは一度しか表示されません。

プログラムでアプリケーションパスワードを管理するためのRESTエンドポイントを含む、より詳細なリファレンスについては、WordPressコアチームのアプリケーションパスワード統合ガイドを参照してください。

認証情報の送信

ユーザー名とアプリケーションパスワードを、すべてのリクエストでHTTP Basic認証として渡します。

curlを使用する場合

このドキュメントの例をそのまま実行できるように、サイトURLを環境変数として設定します。

export WP_SITE="https://your-wordpress-site.com"

次に、すべてのcurlコマンドに-uフラグを追加します。フラグの値は、ユーザー名、コロン、アプリケーションパスワード(スペースなし)です。

Postman、Insomnia、またはその他のクライアントを使用する場合

リクエストの認証タイプをBasic認証に設定し、ユーザー名とアプリケーションパスワードを提供します。クライアントがエンコーディングを処理します。

ヘッダーを手動で設定する

認証情報をbase64エンコードされたAuthorizationヘッダーとして送信します。

ユーザー名とアプリケーションパスワードをコロン(スペースなし)で区切られた単一の文字列に結合し、選択したツール(base64コマンド、オンラインエンコーダー、または言語の標準ライブラリ)を使用して結果をbase64エンコードします。エンコードされた値を、Authorization: Basic <encoded>の形式で、すべてのリクエストのAuthorizationヘッダーとして送信します。

このドキュメントの残りの部分のリクエスト例では、読みやすさのために認証フラグを省略しています。すべての実際のリクエストに-uフラグ(またはAuthorizationヘッダー)を追加してください。そうしないと、APIは401 Unauthorizedを返します。

書き込みアクセスを有効にする

読み取り機能は常に利用可能です。書き込み機能(wpforms/create-formwpforms/add-fieldwpforms/update-fieldwpforms/update-form-settings)はデフォルトで無効になっており、実行される前に有効にする必要があります。有効にする方法は 2 つありますが、フィルターが最終的な決定権を持ちます。

コードで書き込みを有効にする

wpforms_integrations_abilities_allow_write フィルターを使用して、プログラムで書き込みを有効にします。

add_filter( 'wpforms_integrations_abilities_allow_write', '__return_true' );

このフィルターは、コードなしのトグルを双方向にオーバーライドします。true を返すと、トグルがオフの場合でも書き込みが有効になり、false を返すと、トグルがオンの場合でも無効になります。これにより、既存の開発者のセットアップは変更されずに機能し続けます。

コードなしで書き込みを有効にする

サイトオーナーは、WPForms » Tools » AI MCP から MCP書き込みアクセスを有効にする トグルを使用して書き込みを有効にできます。これは、wpforms_settings オプションの ai-mcp-write-enabled キーに永続化されます。上記のフィルターは、このトグルよりも優先されます。完全なウォークスルーについては、AIアシスタントとのWPFormsの使用 を参照してください。

注意: 書き込みが無効になっている間、書き込み機能はMCP検出から非表示になり、実行しようとするとコード wpforms_writes_disabled を持つ 403 が返されます。入力検証は書き込みゲートの前に実行されるため、無効な入力は書き込みが無効な場合でも 400 を返します。

権限

各機能は、実行前に特定のWPForms権限をチェックします。チェックに失敗すると、HTTPステータス403WP_Errorが返されます。

機能権限
wpforms/list-formsview_forms
wpforms/get-formview_form_single
wpforms/get-form-stats (Lite)view_form_single
wpforms/get-form-stats (Pro)view_entries_form_single
wpforms/get-entry-summariesview_entries_form_single
wpforms/get-entryview_entry_single
wpforms/search-entries (form_idあり)view_entries_form_single
wpforms/search-entries (form_idなし)エントリーを表示

WPForms 1.10.2 で追加された書き込み機能は、同じ機能モデルを強制します。wpforms/create-form はフォームを作成する機能が必要であり、wpforms/add-fieldwpforms/update-field、および wpforms/update-form-settings は対象フォームを編集する機能が必要です。チェックに失敗すると、HTTPステータス 403 を持つ WP_Error が返されます。書き込み機能は、上記のように書き込みアクセスが有効になっていることも必要とします。

機能リファレンス

読み取り機能はべき等であり、繰り返し呼び出しても安全です。WPForms 1.10.2 で追加された書き込み機能は、フォームデータを作成または変更し、最初に書き込みアクセスが有効になっている必要があります。エラーは、codemessage、および data.status フィールドを持つ JSON にシリアル化された WP_Error オブジェクトとして返されます。

注意: 以下のリクエスト例では、表示の簡略化のため認証フラグを省略しています。各呼び出しは認証される必要があります。そうでない場合は401 Unauthorizedが返されます。すべてのcurlコマンドに-uフラグを追加するか(または同等のAuthorization: Basicヘッダーを送信)、認証セクションの詳細を参照してください。

wpforms/list-forms

フォームを要約メタデータとともに一覧表示します。LiteおよびProで利用可能です。

パラメーター

名前タイプ必須デフォルト説明
ステータス文字列いいえ公開フォームのステータス。公開下書きゴミ箱のいずれか。
制限整数いいえ20返されるフォームの最大数。範囲は1から100です。
オフセット整数いいえ0スキップするフォームの数。

リクエスト例

curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/list-forms/run?input%5Blimit%5D=10&input%5Bstatus%5D=publish"

レスポンス例

{
  "forms": [
    {
      "id": 123,
      "title": "Contact Form",
      "status": "publish",
      "created": "2026-01-27 10:00:00",
      "modified": "2026-02-15 14:30:00",
      "author": 1
    }
  ],
  "total": 5
}

wpforms/get-form

フォームの設定の厳選されたサブセット、およびオプションでフィールド構成を含む単一のフォームを取得します。LiteおよびProで利用可能です。

パラメーター

名前タイプ必須デフォルト説明
フォームID整数はいなし取得するフォームのID。
フィールドを含めるブール値いいえtrueフォームのフィールド構成をレスポンスに含めます。

リクエスト例

curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-form/run?input%5Bform_id%5D=123&input%5Binclude_fields%5D=true"

レスポンス例

{
  "id": 123,
  "title": "Contact Form",
  "status": "publish",
  "created": "2026-01-27 10:00:00",
  "modified": "2026-02-15 14:30:00",
  "author": 1,
  "settings": {
    "form_title": "Contact Form",
    "form_desc": "Get in touch with us",
    "submit_text": "Submit",
    "ajax_submit": true,
    "honeypot": true,
    "antispam": true
  },
  "fields": [
    {
      "id": 1,
      "type": "text",
      "label": "Name",
      "description": "",
      "required": true,
      "size": "medium"
    }
  ]
}

この機能によって返されるsettingsオブジェクトは、厳選された非機密性のサブセット(タイトル、説明、送信テキスト、AJAX送信フラグ、ハニーポット、スパム防止)です。通知、確認、統合の設定は公開されません。

wpforms/get-form-stats

フォームの送信統計を返します。LiteとProではレスポンスの形状が異なります。

パラメーター

名前タイプ必須デフォルト説明
フォームID整数はいなしフォームのID。

リクエスト例

curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-form-stats/run?input%5Bform_id%5D=123"

Liteレスポンス

{
  "form_id": 123,
  "entries_available": false,
  "message": "Entry statistics require WPForms Pro. Upgrade to access detailed form submission data."
}

Proレスポンス

{
  "form_id": 123,
  "total_entries": 156,
  "unread_entries": 12,
  "starred_entries": 8,
  "entries_available": true
}

wpforms/get-entry-summaries

単一フォームのエントリ概要のページネーションされたリスト。Proのみ。

パラメーター

名前タイプ必須デフォルト説明
フォームID整数はいなしエントリを取得するフォームのID。
ステータス文字列いいえ""partialabandonedspamtrashのいずれか。空の場合はすべての完了したエントリを返します。
タイプ文字列いいえ""readunreadstarredのいずれか。
フィールドを含めるブール値いいえfalse各エントリのフィールド値をレスポンスに含めます。
制限整数いいえ20返されるエントリの最大数。範囲は1から100です。
オフセット整数いいえ0スキップするエントリの数。

リクエスト例

curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-entry-summaries/run?input%5Bform_id%5D=123&input%5Btype%5D=unread&input%5Blimit%5D=20"

レスポンス例

{
  "entries": [
    {
      "id": 456,
      "form_id": 123,
      "date": "2026-02-15 14:32:10",
      "status": "",
      "viewed": false,
      "starred": true
    }
  ],
  "total": 15,
  "form_id": 123
}

wpforms/get-entry

IDで単一のエントリを取得します。すべてのフィールド値が含まれます。Proのみ。

パラメーター

名前タイプ必須デフォルト説明
entry_id整数はいなし取得するエントリのID。
フィールドを含めるブール値いいえtrueエントリのフィールド値をレスポンスに含めます。

リクエスト例

curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-entry/run?input%5Bentry_id%5D=456"

レスポンス例

{
  "id": 456,
  "form_id": 123,
  "date": "2026-02-15 14:32:10",
  "modified": "2026-02-15 15:00:00",
  "status": "",
  "viewed": true,
  "starred": false,
  "ip_address": "192.168.1.100",
  "fields": [
    {
      "id": 1,
      "name": "Name",
      "value": "John Doe",
      "type": "text"
    }
  ]
}

レスポンスのIPアドレスはマスクできます。サイトのコードに add_filter( 'wpforms_abilities_mask_ip_address', '__return_true' ) を追加してください。有効にすると、IPv4アドレスの最後の3つのオクテットがアスタリスクに置き換えられます(例: ***.***.***.100)。

wpforms/search-entries

フルテキスト、フィールド固有、ステータス、日付範囲フィルターを使用して、1つまたはすべてのフォームのエントリを検索します。Proのみ。

パラメーター

名前タイプ必須デフォルト説明
フォームID整数いいえなし検索を単一のフォームに制限します。省略すると、すべてのフォームを検索します。
search文字列いいえ""すべてのエントリフィールドに対して一致するフルテキストクエリ。
field_id整数いいえなし検索を特定のフィールドIDに制限します。field_valueと組み合わせて使用します。
field_value文字列いいえなしfield_idで指定されたフィールドで一致する正確な値。
date_from文字列いいえなし日付範囲の開始、形式YYYY-MM-DD
date_to文字列いいえなし日付範囲の終了、形式YYYY-MM-DD
ステータス文字列いいえ""partialabandonedspamtrashのいずれか。
タイプ文字列いいえ""readunreadstarredのいずれか。
フィールドを含めるブール値いいえtrueエントリフィールド値をレスポンスに含めます。
制限整数いいえ201ページあたりの最大エントリ数。範囲は1から100です。
ページ整数いいえ1ページ番号。この機能は、offsetを使用するlist-formsおよびget-entry-summariesとは異なり、ページベースのページネーションを使用することに注意してください。
並べ替え順序文字列いいえ日付entry_iddatestatusのいずれか。
順序文字列いいえ降順ASCDESCのいずれか。

リクエスト例

curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/search-entries/run?input%5Bform_id%5D=5&input%5Bsearch%5D=john%40example.com&input%5Bpage%5D=1&input%5Blimit%5D=20"

レスポンス例

{
  "entries": [
    {
      "id": 142,
      "form_id": 5,
      "date": "2026-02-15 14:32:10",
      "status": "",
      "viewed": false,
      "starred": true,
      "fields": [
        { "id": 1, "name": "Name",  "value": "John Doe",         "type": "text"  },
        { "id": 2, "name": "Email", "value": "[email protected]", "type": "email" }
      ]
    }
  ],
  "total": 47,
  "total_pages": 5,
  "page": 1,
  "limit": 20
}

以下の機能は WPForms 1.10.2 で追加されました。すべて書き込みアクセスが有効になっている必要があります(書き込みアクセスの有効化 を参照)。ただし、wpforms/describe-editing-schema は読み取り機能であり、書き込み機能が受け入れるものを検出するために使用されます。書き込み機能は、REST を介した POST リクエストとして、または PHP の execute() を介して実行されます。

wpforms/describe-editing-schema

このサイトで書き込み機能が受け入れるフィールドタイプとフォーム設定を返します。利用可能なフィールドタイプはライセンスレベルによって異なるため、最初に呼び出してください。Lite および Pro で利用可能です。

注意: REST では、この機能は GET であり、空でない入力オブジェクトが必要です。パラメーターなしで呼び出すと、メッセージ input is not of type object を持つ 400 が返されます。少なくとも空の角括弧を含むキーを含めてください。例: input%5B%5D=。PHP では、execute() に空の配列を渡します。

リクエスト例

curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/describe-editing-schema/run?input%5B%5D="

応答例(一部)

{
  "field_types": [
    {
      "type": "text",
      "label": "Single Line Text",
      "properties": [
        { "key": "label",         "schema": { "type": "string" } },
        { "key": "required",      "schema": { "type": "boolean" } },
        { "key": "size",          "schema": { "type": "string", "enum": ["small", "medium", "large"] } },
        { "key": "placeholder",   "schema": { "type": "string" } },
        { "key": "default_value", "schema": { "type": "string" } }
      ],
      "required_props": []
    },
    {
      "type": "select",
      "label": "Dropdown",
      "properties": [
        { "key": "choices", "schema": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } }, "required": ["label"] } } },
        { "key": "style",   "schema": { "type": "string", "enum": ["classic", "modern"] } }
      ],
      "required_props": []
    }
  ],
  "form_settings": [
    { "key": "form_title",  "schema": { "type": "string" }, "description": "The form title." },
    { "key": "form_desc",   "schema": { "type": "string" }, "description": "The form description." },
    { "key": "submit_text", "schema": { "type": "string" }, "description": "The submit button label." }
  ]
}

Proでは、field_typestexttextareaemailnumberselectradiocheckboxnamephonedate-timefile-uploadをリストします。Liteでは、セットは基本の8つです:texttextareaemailnumberselectradiocheckboxname。スラッグはビルダーと一致するため、DropdownフィールドはselectDate / Timeフィールドはdate-timeです。

フィールドプロパティ

create-formadd-fieldupdate-fieldの権限は、これらのフィールドプロパティを受け入れます。各プロパティは、describe-editing-schemaによって報告されるように、それを宣言するフィールドタイプにのみ適用されます。

プロパティタイプ適用対象説明
ラベル文字列すべてのタイプフィールドのラベル。
説明文字列すべてのタイプフィールドの説明。
必須ブール値すべてのタイプフィールドが必須かどうか。
サイズ文字列すべてのタイプフィールドサイズ。smallmediumlargeのいずれか。
ラベル非表示ブール値すべてのタイプフロントエンドでフィールドラベルを非表示にします。
プレースホルダー文字列texttextareaemailnumberphoneプレースホルダーテキスト。
デフォルト値文字列texttextareaemailnumberphoneデフォルト値。
選択肢arrayselectradiocheckbox{ "label": "...", "value": "..." }オブジェクトの順序付けられたリスト。valueはオプションで、省略された場合はラベルから派生します。
スタイル文字列selectfile-upload表示スタイル。classicmodernのいずれか。
入力列文字列radiocheckbox列レイアウト。""inline23のいずれか。
拡張子文字列ファイルアップロード許可されたファイル拡張子のカンマ区切りリスト。
最大サイズ整数ファイルアップロード最大ファイルサイズ。最小1。
最大ファイル数整数ファイルアップロード最大ファイル数。最小1。
メディアライブラリブール値ファイルアップロードアップロードをWordPressメディアライブラリに保存します。

wpforms/create-form

オプションのフィールドセットと設定を使用して、新しいフォームを1回の呼び出しで作成します。LiteおよびProで利用可能です。

パラメーター

名前タイプ必須デフォルト説明
タイトル文字列はいなしフォームのタイトル。
フィールドarrayいいえなし初期フィールド。各項目には、そのタイプに応じたtypeとフィールドプロパティが必要です。
設定オブジェクトいいえなし初期設定。form_titleform_descsubmit_textの1つ以上。

注意: 入力スキーマはadditionalPropertiesfalseに設定しているため、トップレベルではtitlefieldssettingsのみが受け入れられます。トップレベルのdescriptionキーは400で拒否されます。フォームの説明は、代わりにsettings.form_descで設定してください。

リクエスト例

$ability = wp_get_ability( 'wpforms/create-form' );

$result = $ability->execute(
    [
        'title'  => 'Job Application',
        'fields' => [
            [ 'type' => 'name',   'label' => 'Your Name', 'required' => true ],
            [ 'type' => 'email',  'label' => 'Email',      'required' => true ],
            [ 'type' => 'select', 'label' => 'Position',   'choices' => [ [ 'label' => 'Baker' ], [ 'label' => 'Cashier' ] ] ],
        ],
        'settings' => [
            'form_title'  => 'Job Application',
            'form_desc'   => 'Apply to join our team.',
            'submit_text' => 'Apply Now',
        ],
    ]
);

レスポンス例

{
  "form_id": 1102,
  "fields": [
    { "id": 0, "type": "name" },
    { "id": 1, "type": "email" },
    { "id": 2, "type": "select" }
  ]
}

wpforms/add-field

既存のフォームに新しいフィールドを追加します。LiteおよびProで利用可能です。

パラメーター

名前タイプ必須デフォルト説明
フォームID整数はいなしフィールドを追加するフォームのID。
タイプ文字列はいなしフィールドタイプのスラッグ。利用可能なタイプについては、describe-editing-schemaを呼び出してください。

form_idおよびtypeと共に、選択したタイプのフィールドプロパティを渡します(上記のフィールドプロパティテーブルを参照)。

リクエスト例

$ability = wp_get_ability( 'wpforms/add-field' );

$result = $ability->execute(
    [
        'form_id'  => 1102,
        'type'     => 'phone',
        'label'    => 'Phone',
        'required' => true,
    ]
);

レスポンス例

{
  "form_id": 1102,
  "field_id": 6,
  "type": "phone"
}

注意: LiteでProタイプやサポートされていないタイプなど、サイトで利用できないフィールドタイプをリクエストすると、wpforms_field_type_unavailableコードで422が返されます。

wpforms/update-field

既存のフィールドのプロパティを更新します。LiteおよびProで利用可能です。

パラメーター

名前タイプ必須デフォルト説明
フォームID整数はいなしフィールドが含まれているフォームのID。
field_id整数はいなし更新するフィールドのID。

変更したいフィールドプロパティをform_idおよびfield_idと共に渡します(上記のフィールドプロパティテーブルを参照)。省略したプロパティは変更されません。choicesを送信すると、新しいリストが既存の選択肢にインデックスでマージされます。

リクエスト例

$ability = wp_get_ability( 'wpforms/update-field' );

$result = $ability->execute(
    [
        'form_id'     => 1102,
        'field_id'    => 6,
        'required'    => true,
        'placeholder' => 'e.g. 555-123-4567',
    ]
);

レスポンス例

{
  "form_id": 1102,
  "field_id": 6,
  "updated": ["required", "placeholder"],
  "ignored": []
}

wpforms/update-form-settings

フォームの安全な設定を更新します。v1ホワイトリストはform_titleform_descsubmit_textです。LiteおよびProで利用可能です。

パラメーター

名前タイプ必須デフォルト説明
フォームID整数はいなし更新するフォームのID。
設定オブジェクトはいなしform_titleform_descsubmit_text のいずれか1つ以上。

リクエスト例

$ability = wp_get_ability( 'wpforms/update-form-settings' );

$result = $ability->execute(
    [
        'form_id'  => 1102,
        'settings' => [
            'submit_text' => 'Send Application',
        ],
    ]
);

レスポンス例

{
  "form_id": 1102,
  "updated": ["submit_text"],
  "ignored": []
}

ホワイトリストにないキーは、エラーを発生させる代わりに ignored 配列で返されます。たとえば、ajax_submit を送信すると、変更されずに ignored の下にリストされます。

MCPクライアントでのWPFormsの使用

読み取りアビリティは mcp.publictrue に設定されて登録されるため、MCP互換のAIクライアント(Claude Desktop、Cursorなど)は、WordPressサイトが wordpress/mcp-adapter プラグインを介して接続されると自動的に検出します。書き込みアビリティと wpforms/describe-editing-schema は、書き込みアクセスが有効な場合にのみMCPに公開されます。書き込みが無効な場合、それらの mcp.public フラグは false になり、MCP検出から非表示になるため、アシスタントはWPForms書き込みツールを見つけられないと報告する場合があります。サイトが接続され、書き込みアクセスがオンになると、アビリティはクライアントのツールリストの WPForms カテゴリの下に表示され、REST APIで使用されるのと同じ権限コールバックを尊重します。

機能のプログラムによる検出

IDをハードコーディングする代わりに、サイトで利用可能な機能を列挙するには:

# List all registered abilities on the site
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities"

# Fetch the schema for a single ability
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/list-forms"

応答には、各機能のID、ラベル、説明、カテゴリ、および完全な入力および出力スキーマが含まれており、WPForms固有のサーフェスに関する事前知識なしに汎用クライアントを構築するのに十分な情報が含まれています。

書き込みアビリティは、書き込みアクセスが有効かどうかに関係なく、WPForms 1.10.2以降を実行しているサイトのこのインデックスに表示されます。ただし、それらの mcp.public フラグは書き込みアクセス状態を反映します。書き込みが有効な場合にのみ true になるため、MCPクライアントは書き込みツールを書き込みアクセスがオンになった後にのみ表示します。

フィールドレジストリの拡張

書き込みアビリティが受け入れるフィールドタイプとプロパティは、拡張可能なレジストリで定義されています。アドオンは2つのフィルターを介して独自のフィールドタイプとプロパティを登録できるため、カスタムフィールドタイプまたはアドオンフィールドタイプを create-formadd-field、および update-field で利用できるようになります。

  • wpforms_integrations_abilities_field_registry_types は新しいフィールドタイプを登録します。各タイプは requires 値を介して可用性を宣言します。この値は文字列 pro、アドオンのスラッグ、または呼び出し可能であり、必要なプロパティを指定できます。
  • wpforms_integrations_abilities_field_registry_properties は、フィールドタイプが参照できる新しいプロパティ定義を提供します。
add_filter(
    'wpforms_integrations_abilities_field_registry_types',
    function ( $types ) {
        // Register one or more field types here, then return the list.
        return $types;
    }
);