Skip to main content
Glama
RegisterMcpPrompt.php3.16 kB
<?php //phpcs:ignore declare(strict_types=1); namespace Automattic\WordpressMcp\Core; use InvalidArgumentException; /** * Register an MCP prompt. */ class RegisterMcpPrompt { /** * The prompt instance. * * @var array */ private array $prompt; /** * The messages instance. * * @var array */ private array $messages; /** * Constructor. * * @param array $prompt The prompt instance. * @param array $messages The messages instance. * @throws InvalidArgumentException|\RuntimeException When the prompt is invalid or registered outside of wordpress_mcp_init action. */ public function __construct( array $prompt, array $messages ) { if ( ! doing_action( 'wordpress_mcp_init' ) ) { throw new \RuntimeException( 'RegisterMcpPrompt can only be used within the wordpress_mcp_init action.' ); } $this->prompt = $prompt; $this->messages = $messages; $this->validate_prompt(); $this->register_prompt(); } /** * Register the prompt. * * @return void */ private function register_prompt(): void { WPMCP()->register_prompt( $this->prompt, $this->messages ); } /** * Validate the prompt. * * @return void * @throws InvalidArgumentException When the prompt is invalid. */ private function validate_prompt(): void { // Validate the prompt name. if ( empty( $this->prompt['name'] ) || ! is_string( $this->prompt['name'] ) ) { throw new InvalidArgumentException( 'The prompt name must be a non-empty string.' ); } // Validate the prompt description. if ( empty( $this->prompt['description'] ) || ! is_string( $this->prompt['description'] ) ) { throw new InvalidArgumentException( 'The prompt description must be a non-empty string.' ); } if ( isset( $this->prompt['arguments'] ) ) { if ( ! is_array( $this->prompt['arguments'] ) ) { throw new InvalidArgumentException( 'The prompt arguments must be an array.' ); } // Validate each argument. foreach ( $this->prompt['arguments'] as $argument ) { if ( empty( $argument['name'] ) || ! is_string( $argument['name'] ) ) { throw new InvalidArgumentException( 'Each argument must have a non-empty name.' ); } if ( isset( $argument['description'] ) && ! is_string( $argument['description'] ) ) { throw new InvalidArgumentException( 'The argument description must be a string.' ); } if ( isset( $argument['required'] ) && ! is_bool( $argument['required'] ) ) { throw new InvalidArgumentException( 'The argument required flag must be a boolean.' ); } } } // Validate each message. foreach ( $this->messages as $message ) { if ( ! is_array( $message ) ) { throw new InvalidArgumentException( 'Each message must be an array.' ); } // Validate the message structure. if ( ! isset( $message['role'] ) || ! isset( $message['content'] ) ) { throw new InvalidArgumentException( 'Each message must have a role and content.' ); } // Validate the content. if ( ! isset( $message['content']['type'] ) || ! isset( $message['content']['text'] ) ) { throw new InvalidArgumentException( 'Each message must have a type and text.' ); } } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Automattic/wordpress-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server