Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
969ff10
feat: Generate PHP DTOs from MCP schema version 2025-11-25
galatanovidiu Dec 10, 2025
d120ee5
docs: Update README with new generator features
galatanovidiu Dec 11, 2025
7a4a9a5
docs: Update architecture documentation with new components
galatanovidiu Dec 11, 2025
c750230
docs: Update configuration guide with new outputs and features
galatanovidiu Dec 11, 2025
0a31fe2
docs: Update design decisions with new type handling strategies
galatanovidiu Dec 11, 2025
8572f7f
feat: Add constants generator for protocol constants
galatanovidiu Dec 11, 2025
92e460a
feat: Add numeric enum generator for TypeScript enums
galatanovidiu Dec 11, 2025
5e470c1
feat: Add type alias wrapper generator
galatanovidiu Dec 11, 2025
0ec11f5
feat: Add intersection type wrapper generator
galatanovidiu Dec 11, 2025
3960af0
feat: Add schema map generator for JSON metadata
galatanovidiu Dec 11, 2025
d81b175
feat: Add skill file generator for Claude Code integration
galatanovidiu Dec 11, 2025
8aed907
feat: Add skill markdown helpers
galatanovidiu Dec 11, 2025
d85185f
feat: Export new generators from index
galatanovidiu Dec 11, 2025
525bab8
feat: Support numeric constants in type mapper
galatanovidiu Dec 11, 2025
d1f71eb
feat: Integrate new generators into main pipeline
galatanovidiu Dec 11, 2025
68b67db
feat: Enhance parser to extract numeric constants
galatanovidiu Dec 11, 2025
eaa5c0f
feat: Add skill types definitions
galatanovidiu Dec 11, 2025
b97adfc
feat: Update TsConstant type to support numeric values
galatanovidiu Dec 11, 2025
c597697
feat: Generate skill documentation files
galatanovidiu Dec 11, 2025
04094c4
feat: Generate skill JSON data files
galatanovidiu Dec 11, 2025
761eeb3
feat: Generate skill search scripts
galatanovidiu Dec 11, 2025
b5e870f
feat: Generate McpConstants PHP class
galatanovidiu Dec 11, 2025
17b66e8
feat: Generate EmptyResult wrapper class
galatanovidiu Dec 11, 2025
f3afd87
feat: Generate task result intersection type wrappers
galatanovidiu Dec 11, 2025
1e8eb64
fix: Extract properties from inline object types with JSDoc comments
galatanovidiu Dec 11, 2025
0d5302a
fix: Use asArrayOrNull for optional array properties in fromArray()
galatanovidiu Dec 11, 2025
0a9fc15
feat: Add runtime validation for ProgressToken (string|number) type
galatanovidiu Dec 11, 2025
53a777a
feat: Add runtime validation for index signature value types
galatanovidiu Dec 11, 2025
9397925
feat: Add runtime validation for 100-item limit on CompleteResultComp…
galatanovidiu Dec 11, 2025
866211f
feat: Use asArrayOrNull for optional array properties in intersection…
galatanovidiu Dec 11, 2025
1832495
feat: Fix property name handling in IntersectionTypeWrapperGenerator
galatanovidiu Dec 11, 2025
76ef307
fix(generator): deep-serialize union DTOs in toArray() to avoid {} in…
galatanovidiu Dec 12, 2025
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
146 changes: 146 additions & 0 deletions src/Client/Elicitation/BooleanSchema.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
<?php

declare(strict_types=1);

namespace WP\McpSchema\Client\Elicitation;

use WP\McpSchema\Client\Elicitation\Union\PrimitiveSchemaDefinitionInterface;
use WP\McpSchema\Common\AbstractDataTransferObject;
use WP\McpSchema\Common\Traits\ValidatesRequiredFields;

/**
* @since 2025-06-18
*
* @mcp-domain Client
* @mcp-subdomain Elicitation
* @mcp-version 2025-11-25
*/
class BooleanSchema extends AbstractDataTransferObject implements PrimitiveSchemaDefinitionInterface
{
use ValidatesRequiredFields;

public const TYPE = 'boolean';

public const DISCRIMINATOR_FIELD = 'type';
public const DISCRIMINATOR_VALUE = 'boolean';

/**
* @since 2025-06-18
*
* @var 'boolean'
*/
protected string $type;

/**
* @since 2025-06-18
*
* @var string|null
*/
protected ?string $title;

/**
* @since 2025-06-18
*
* @var string|null
*/
protected ?string $description;

/**
* @since 2025-06-18
*
* @var bool|null
*/
protected ?bool $default;

/**
* @param string|null $title @since 2025-06-18
* @param string|null $description @since 2025-06-18
* @param bool|null $default @since 2025-06-18
*/
public function __construct(
?string $title = null,
?string $description = null,
?bool $default = null
) {
$this->type = self::TYPE;
$this->title = $title;
$this->description = $description;
$this->default = $default;
}

/**
* Creates an instance from an array.
*
* @param array{
* type: 'boolean',
* title?: string|null,
* description?: string|null,
* default?: bool|null
* } $data
* @phpstan-param array<string, mixed> $data
* @return self
*/
public static function fromArray(array $data): self
{
return new self(
self::asStringOrNull($data['title'] ?? null),
self::asStringOrNull($data['description'] ?? null),
self::asBoolOrNull($data['default'] ?? null)
);
}

/**
* Converts the instance to an array.
*
* @return array<string, mixed>
*/
public function toArray(): array
{
$result = [];

$result['type'] = $this->type;
if ($this->title !== null) {
$result['title'] = $this->title;
}
if ($this->description !== null) {
$result['description'] = $this->description;
}
if ($this->default !== null) {
$result['default'] = $this->default;
}

return $result;
}

/**
* @return 'boolean'
*/
public function getType(): string
{
return $this->type;
}

/**
* @return string|null
*/
public function getTitle(): ?string
{
return $this->title;
}

/**
* @return string|null
*/
public function getDescription(): ?string
{
return $this->description;
}

/**
* @return bool|null
*/
public function getDefault(): ?bool
{
return $this->default;
}
}
106 changes: 106 additions & 0 deletions src/Client/Elicitation/ElicitRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?php

declare(strict_types=1);

namespace WP\McpSchema\Client\Elicitation;

use WP\McpSchema\Client\Elicitation\Factory\ElicitRequestParamsFactory;
use WP\McpSchema\Client\Elicitation\Union\ElicitRequestParamsInterface;
use WP\McpSchema\Common\JsonRpc\JSONRPCRequest;
use WP\McpSchema\Common\Protocol\Union\ServerRequestInterface;
use WP\McpSchema\Common\Traits\ValidatesRequiredFields;

/**
* A request from the server to elicit additional information from the user via the client.
*
* @since 2025-06-18
* @last-updated 2025-11-25 (modified property: params)
*
* @mcp-domain Client
* @mcp-subdomain Elicitation
* @mcp-version 2025-11-25
*/
class ElicitRequest extends JSONRPCRequest implements ServerRequestInterface
{
use ValidatesRequiredFields;

public const METHOD = 'elicitation/create';

public const DISCRIMINATOR_FIELD = 'method';
public const DISCRIMINATOR_VALUE = 'elicitation/create';

/**
* @var \WP\McpSchema\Client\Elicitation\Union\ElicitRequestParamsInterface
*/
protected ElicitRequestParamsInterface $typedParams;

/**
* @param '2.0' $jsonrpc @since 2025-11-25
* @param string|number $id @since 2025-11-25
* @param \WP\McpSchema\Client\Elicitation\Union\ElicitRequestParamsInterface $params @since 2025-06-18
*/
public function __construct(
string $jsonrpc,
$id,
ElicitRequestParamsInterface $params
) {
parent::__construct(self::METHOD, $jsonrpc, $id, null);
$this->typedParams = $params;
}

/**
* Creates an instance from an array.
*
* @param array{
* jsonrpc: '2.0',
* id: string|number,
* method: 'elicitation/create',
* params: array<string, mixed>|\WP\McpSchema\Client\Elicitation\Union\ElicitRequestParamsInterface
* } $data
* @phpstan-param array<string, mixed> $data
* @return self
*/
public static function fromArray(array $data): self
{
self::assertRequired($data, ['jsonrpc', 'id', 'params']);

/** @var '2.0' $jsonrpc */
$jsonrpc = self::asString($data['jsonrpc']);

/** @var string|number $id */
$id = $data['id'];

/** @var \WP\McpSchema\Client\Elicitation\Union\ElicitRequestParamsInterface $params */
$params = is_array($data['params'])
? ElicitRequestParamsFactory::fromArray(self::asArray($data['params']))
: $data['params'];

return new self(
$jsonrpc,
$id,
$params
);
}

/**
* Converts the instance to an array.
*
* @return array<string, mixed>
*/
public function toArray(): array
{
$result = parent::toArray();

$result['params'] = $this->typedParams->toArray();

return $result;
}

/**
* @return \WP\McpSchema\Client\Elicitation\Union\ElicitRequestParamsInterface
*/
public function getTypedParams(): ElicitRequestParamsInterface
{
return $this->typedParams;
}
}
Loading