{
  "generated": "2026-06-09T22:05:06.078Z",
  "product": {
    "id": "block-mcp",
    "label": "Block MCP",
    "repo": "GravityKit/block-mcp",
    "actions": [],
    "filters": [
      "gk/block-mcp/agent/caps",
      "gk/block-mcp/agent/login",
      "gk/block-mcp/agent/reassign-to",
      "gk/block-mcp/agent/remove-on-uninstall",
      "gk/block-mcp/agent/role",
      "gk/block-mcp/block/dual-storage",
      "gk/block-mcp/block/format",
      "gk/block-mcp/credential/seal-mode",
      "gk/block-mcp/identity/allow-self",
      "gk/block-mcp/mcpb/manifest",
      "gk/block-mcp/media/sideload-blocked-ipv6-cidrs",
      "gk/block-mcp/media/sideload-blocked-ranges",
      "gk/block-mcp/media/upload-overrides",
      "gk/block-mcp/media/uploads-enabled",
      "gk/block-mcp/pattern/legacy-scan-limit",
      "gk/block-mcp/pattern/ref-scan-batch-size",
      "gk/block-mcp/pattern/synced-query-limit",
      "gk/block-mcp/post/allow-trash",
      "gk/block-mcp/term/allow-taxonomy"
    ]
  },
  "hooks": [
    {
      "id": "gk-block-mcp-agent-caps",
      "name": "gk/block-mcp/agent/caps",
      "type": "filter",
      "product": "block-mcp",
      "description": "Tune exactly what the Block MCP agent account is allowed to do.",
      "parameters": [
        {
          "name": "caps",
          "type": "array&lt;string,bool&gt;",
          "description": "Map of capability name =&gt; granted, for the agent role."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/agent/caps', function($caps) {\n    // Modify $caps as needed\n    return $caps;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-agent-provisioner.php",
        "line": 95
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-agent-caps/",
      "related": [
        "gk/block-mcp/agent/login",
        "gk/block-mcp/agent/reassign-to",
        "gk/block-mcp/agent/remove-on-uninstall",
        "gk/block-mcp/agent/role"
      ]
    },
    {
      "id": "gk-block-mcp-agent-login",
      "name": "gk/block-mcp/agent/login",
      "type": "filter",
      "product": "block-mcp",
      "description": "Name the AI agent's user account to match your house style.",
      "parameters": [
        {
          "name": "login",
          "type": "string",
          "description": "Account login name for the agent. Default 'block-mcp'."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/agent/login', function($login) {\n    // Modify $login as needed\n    return $login;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-agent-provisioner.php",
        "line": 185
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-agent-login/",
      "related": [
        "gk/block-mcp/agent/caps",
        "gk/block-mcp/agent/reassign-to",
        "gk/block-mcp/agent/remove-on-uninstall",
        "gk/block-mcp/agent/role"
      ]
    },
    {
      "id": "gk-block-mcp-agent-reassign-to",
      "name": "gk/block-mcp/agent/reassign-to",
      "type": "filter",
      "product": "block-mcp",
      "description": "Choose who inherits the agent's content when its account is deleted.",
      "parameters": [
        {
          "name": "reassign_to",
          "type": "int",
          "description": "Target user ID, or 0 to use the first administrator. Default 0."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/agent/reassign-to', function($reassign_to) {\n    // Modify $reassign_to as needed\n    return $reassign_to;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-agent-provisioner.php",
        "line": 361
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-agent-reassign-to/",
      "related": [
        "gk/block-mcp/agent/caps",
        "gk/block-mcp/agent/login",
        "gk/block-mcp/agent/remove-on-uninstall",
        "gk/block-mcp/agent/role"
      ]
    },
    {
      "id": "gk-block-mcp-agent-remove-on-uninstall",
      "name": "gk/block-mcp/agent/remove-on-uninstall",
      "type": "filter",
      "product": "block-mcp",
      "description": "Keep the AI agent account alive across an uninstall/reinstall cycle.",
      "parameters": [
        {
          "name": "remove",
          "type": "bool",
          "description": "Whether to remove the agent on uninstall. Default true."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/agent/remove-on-uninstall', function($remove) {\n    // Modify $remove as needed\n    return $remove;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-agent-provisioner.php",
        "line": 328
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-agent-remove-on-uninstall/",
      "related": [
        "gk/block-mcp/agent/caps",
        "gk/block-mcp/agent/login",
        "gk/block-mcp/agent/reassign-to",
        "gk/block-mcp/agent/role"
      ]
    },
    {
      "id": "gk-block-mcp-agent-role",
      "name": "gk/block-mcp/agent/role",
      "type": "filter",
      "product": "block-mcp",
      "description": "Run the AI agent on a role you control instead of the built-in one.",
      "parameters": [
        {
          "name": "role",
          "type": "string",
          "description": "Role slug for the agent account. Default 'block_mcp_agent'."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/agent/role', function($role) {\n    // Modify $role as needed\n    return $role;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-agent-provisioner.php",
        "line": 134
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-agent-role/",
      "related": [
        "gk/block-mcp/agent/caps",
        "gk/block-mcp/agent/login",
        "gk/block-mcp/agent/reassign-to",
        "gk/block-mcp/agent/remove-on-uninstall"
      ]
    },
    {
      "id": "gk-block-mcp-block-dual-storage",
      "name": "gk/block-mcp/block/dual-storage",
      "type": "filter",
      "product": "block-mcp",
      "description": "Teach the editor about blocks that keep content in two places.",
      "parameters": [
        {
          "name": "dual_blocks",
          "type": "string[]",
          "description": "Block names treated as dual-storage."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/block/dual-storage', function($dual_blocks) {\n    // Modify $dual_blocks as needed\n    return $dual_blocks;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-block-inventory.php",
        "line": 158
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-block-dual-storage/",
      "related": [
        "gk/block-mcp/block/format"
      ]
    },
    {
      "id": "gk-block-mcp-block-format",
      "name": "gk/block-mcp/block/format",
      "type": "filter",
      "product": "block-mcp",
      "description": "Shape what the AI sees for any block before it's returned.",
      "parameters": [
        {
          "name": "data",
          "type": "array",
          "description": "Formatted block data about to be returned."
        },
        {
          "name": "block_name",
          "type": "string",
          "description": "Fully-qualified block type name."
        },
        {
          "name": "context",
          "type": "array",
          "description": "Additional context for enrichers that need it (read path only)."
        },
        {
          "name": "parsed_block",
          "type": "array",
          "description": "Raw parse_blocks() entry for this block."
        },
        {
          "name": "render",
          "type": "bool",
          "description": "Whether render-mode is active."
        },
        {
          "name": "reader",
          "type": "object",
          "description": "This Block_Reader instance (enables recursive formatting of nested trees, e.g. synced pattern contents)."
        }
      ],
      "categories": [
        "forms"
      ],
      "example": "add_filter( 'gk/block-mcp/block/format', function($data, $block_name, $context, $parsed_block, $render, $reader) {\n    // Modify $data as needed\n    return $data;\n}, 10, 6 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-block-reader.php",
        "line": 549
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-block-format/",
      "related": [
        "gk/block-mcp/block/dual-storage"
      ]
    },
    {
      "id": "gk-block-mcp-credential-seal-mode",
      "name": "gk/block-mcp/credential/seal-mode",
      "type": "filter",
      "product": "block-mcp",
      "description": "Decide whether the downloadable .mcpb bundle carries the password.",
      "parameters": [
        {
          "name": "mode",
          "type": "string",
          "description": "Secret-at-rest mode: 'prefill' to embed, 'paste' to omit. Default 'prefill'."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/credential/seal-mode', function($mode) {\n    // Modify $mode as needed\n    return $mode;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-connect-page.php",
        "line": 518
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-credential-seal-mode/",
      "related": []
    },
    {
      "id": "gk-block-mcp-identity-allow-self",
      "name": "gk/block-mcp/identity/allow-self",
      "type": "filter",
      "product": "block-mcp",
      "description": "Forbid full-account connections so the AI is always a limited agent.",
      "parameters": [
        {
          "name": "allowed",
          "type": "bool",
          "description": "Whether the \"your own account\" identity is offered. Default true."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/identity/allow-self', function($allowed) {\n    // Modify $allowed as needed\n    return $allowed;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-connect-page.php",
        "line": 381
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-identity-allow-self/",
      "related": []
    },
    {
      "id": "gk-block-mcp-mcpb-manifest",
      "name": "gk/block-mcp/mcpb/manifest",
      "type": "filter",
      "product": "block-mcp",
      "description": "Customize the Claude Desktop .mcpb bundle before it's packaged.",
      "parameters": [
        {
          "name": "manifest",
          "type": "array&lt;string,mixed&gt;",
          "description": "The generated .mcpb manifest array."
        },
        {
          "name": "creds",
          "type": "array&lt;string,string&gt;",
          "description": "The credentials the bundle is built for."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/mcpb/manifest', function($manifest, $creds) {\n    // Modify $manifest as needed\n    return $manifest;\n}, 10, 2 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-mcpb-generator.php",
        "line": 135
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-mcpb-manifest/",
      "related": []
    },
    {
      "id": "gk-block-mcp-media-sideload-blocked-ipv6-cidrs",
      "name": "gk/block-mcp/media/sideload-blocked-ipv6-cidrs",
      "type": "filter",
      "product": "block-mcp",
      "description": "Adjust which IPv6 ranges are off-limits when sideloading from a URL.",
      "parameters": [
        {
          "name": "v6_cidrs",
          "type": "array&lt;int,string&gt;",
          "description": "Blocked IPv6 ranges as CIDR strings."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/media/sideload-blocked-ipv6-cidrs', function($v6_cidrs) {\n    // Modify $v6_cidrs as needed\n    return $v6_cidrs;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-media-manager.php",
        "line": 649
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-media-sideload-blocked-ipv6-cidrs/",
      "related": [
        "gk/block-mcp/media/sideload-blocked-ranges",
        "gk/block-mcp/media/upload-overrides",
        "gk/block-mcp/media/uploads-enabled"
      ]
    },
    {
      "id": "gk-block-mcp-media-sideload-blocked-ranges",
      "name": "gk/block-mcp/media/sideload-blocked-ranges",
      "type": "filter",
      "product": "block-mcp",
      "description": "Adjust which IPv4 ranges are off-limits when sideloading from a URL.",
      "parameters": [
        {
          "name": "v4_ranges",
          "type": "array&lt;int,array\\{0:&gt;",
          "description": "Blocked IPv4 ranges as [start, end] dotted-quad pairs."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/media/sideload-blocked-ranges', function($v4_ranges) {\n    // Modify $v4_ranges as needed\n    return $v4_ranges;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-media-manager.php",
        "line": 569
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-media-sideload-blocked-ranges/",
      "related": [
        "gk/block-mcp/media/sideload-blocked-ipv6-cidrs",
        "gk/block-mcp/media/upload-overrides",
        "gk/block-mcp/media/uploads-enabled"
      ]
    },
    {
      "id": "gk-block-mcp-media-upload-overrides",
      "name": "gk/block-mcp/media/upload-overrides",
      "type": "filter",
      "product": "block-mcp",
      "description": "Fine-tune how WordPress handles an agent's multipart file upload.",
      "parameters": [
        {
          "name": "default_overrides",
          "type": "array",
          "description": "Overrides passed to media_handle_upload(). Default array( 'test_form' =&gt; false )."
        },
        {
          "name": "field",
          "type": "string",
          "description": "The $_FILES key whose upload is being processed."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/media/upload-overrides', function($default_overrides, $field) {\n    // Modify $default_overrides as needed\n    return $default_overrides;\n}, 10, 2 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-media-manager.php",
        "line": 251
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-media-upload-overrides/",
      "related": [
        "gk/block-mcp/media/sideload-blocked-ipv6-cidrs",
        "gk/block-mcp/media/sideload-blocked-ranges",
        "gk/block-mcp/media/uploads-enabled"
      ]
    },
    {
      "id": "gk-block-mcp-media-uploads-enabled",
      "name": "gk/block-mcp/media/uploads-enabled",
      "type": "filter",
      "product": "block-mcp",
      "description": "Flip the AI's media library access to read-only in one line.",
      "parameters": [
        {
          "name": "enabled",
          "type": "bool",
          "description": "Whether uploads are currently allowed by the stored option."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/media/uploads-enabled', function($enabled) {\n    // Modify $enabled as needed\n    return $enabled;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-media-manager.php",
        "line": 100
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-media-uploads-enabled/",
      "related": [
        "gk/block-mcp/media/sideload-blocked-ipv6-cidrs",
        "gk/block-mcp/media/sideload-blocked-ranges",
        "gk/block-mcp/media/upload-overrides"
      ]
    },
    {
      "id": "gk-block-mcp-pattern-legacy-scan-limit",
      "name": "gk/block-mcp/pattern/legacy-scan-limit",
      "type": "filter",
      "product": "block-mcp",
      "description": "Set how many synced patterns the legacy-block audit scans at once.",
      "parameters": [
        {
          "name": "limit",
          "type": "int",
          "description": "Maximum number of synced patterns to scan in one pass. Default 500."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/pattern/legacy-scan-limit', function($limit) {\n    // Modify $limit as needed\n    return $limit;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-block-inventory.php",
        "line": 724
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-pattern-legacy-scan-limit/",
      "related": [
        "gk/block-mcp/pattern/ref-scan-batch-size",
        "gk/block-mcp/pattern/synced-query-limit"
      ]
    },
    {
      "id": "gk-block-mcp-pattern-ref-scan-batch-size",
      "name": "gk/block-mcp/pattern/ref-scan-batch-size",
      "type": "filter",
      "product": "block-mcp",
      "description": "Tune the memory/speed trade-off when counting pattern usage.",
      "parameters": [
        {
          "name": "batch_size",
          "type": "int",
          "description": "Number of post rows pulled per chunk. Default 200."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/pattern/ref-scan-batch-size', function($batch_size) {\n    // Modify $batch_size as needed\n    return $batch_size;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-pattern-manager.php",
        "line": 561
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-pattern-ref-scan-batch-size/",
      "related": [
        "gk/block-mcp/pattern/legacy-scan-limit",
        "gk/block-mcp/pattern/synced-query-limit"
      ]
    },
    {
      "id": "gk-block-mcp-pattern-synced-query-limit",
      "name": "gk/block-mcp/pattern/synced-query-limit",
      "type": "filter",
      "product": "block-mcp",
      "description": "Set how many synced patterns the API recognizes per query.",
      "parameters": [
        {
          "name": "limit",
          "type": "int",
          "description": "Maximum number of synced patterns acknowledged per query. Default 500."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/pattern/synced-query-limit', function($limit) {\n    // Modify $limit as needed\n    return $limit;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-pattern-manager.php",
        "line": 484
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-pattern-synced-query-limit/",
      "related": [
        "gk/block-mcp/pattern/legacy-scan-limit",
        "gk/block-mcp/pattern/ref-scan-batch-size"
      ]
    },
    {
      "id": "gk-block-mcp-post-allow-trash",
      "name": "gk/block-mcp/post/allow-trash",
      "type": "filter",
      "product": "block-mcp",
      "description": "Control whether the AI assistant may move posts to the trash.",
      "parameters": [
        {
          "name": "enabled",
          "type": "bool",
          "description": "Whether trashing is currently allowed by the stored option."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/post/allow-trash', function($enabled) {\n    // Modify $enabled as needed\n    return $enabled;\n}, 10, 1 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-post-manager.php",
        "line": 82
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-post-allow-trash/",
      "related": []
    },
    {
      "id": "gk-block-mcp-term-allow-taxonomy",
      "name": "gk/block-mcp/term/allow-taxonomy",
      "type": "filter",
      "product": "block-mcp",
      "description": "Decide which taxonomies the AI can browse terms from.",
      "parameters": [
        {
          "name": "allow",
          "type": "bool",
          "description": "Whether the taxonomy is listable (defaults to its show_in_rest value)."
        },
        {
          "name": "taxonomy",
          "type": "string",
          "description": "Sanitized taxonomy slug."
        },
        {
          "name": "tax_object",
          "type": "\\WP_Taxonomy\\",
          "description": "null\\"
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gk/block-mcp/term/allow-taxonomy', function($allow, $taxonomy, $tax_object) {\n    // Modify $allow as needed\n    return $allow;\n}, 10, 3 );",
      "since": "[2.0.0](../../since/2-0-0/)",
      "source": {
        "file": "wordpress-plugin/gk-block-api/includes/class-term-manager.php",
        "line": 81
      },
      "url": "/docs/block-mcp/filters/gk-block-mcp-term-allow-taxonomy/",
      "related": []
    }
  ],
  "stats": {
    "total": 19,
    "actions": 0,
    "filters": 19
  }
}