modelcontextprotocol / modelcontextprotocol/php-sdk
[Server] Decode JSON-RPC objects as stdClass, not associative arrays
Nobody has claimed this yet.
- Dominant language
- PHP
- Stars
- 1.6k
- Forks
- 173
- Avg merge
- 2d 49m
- Merged PRs (30d)
- 23
Description
Is your feature request related to a problem? Please describe.
The current implementation uses associative array for the decoding the JSON-RPC message. Which will break the Opis\JsonSchema\Validator since it needs the stdClass for a object as described in the docs. Currently the empty array/object ambiguity exists and the validation fails.
Describe the solution you'd like
Preserve JSON object/array semantics on inbound MCP messages and set associative parameter to false. Update all internal methods to work with stdClass objects instead of associative arrays.
json_decode($input, false, JSON_THROW_ON_ERROR)
Additional context
This feature would allow to work with fully validated object structures with #Schema attribute on input parameters in tool calls. Here is an example how a tool call failed and the model confusion about the parameter typing. The tool method is using this signature: McpServer::updateDocument(array $document) So i asked the model why did it fail, this is the answer:
The document parameter type should be object (not array), and the description should clarify the expected root structure:
{
"document": {
"type": "object",
"description": "Complete document (root object with type, name, version properties)",
"properties": {
"type": { "type": "string" },
"name": { "type": "string" },
"version": { "type": "string" },
},
"required": ["type", "name", "version"]
}
}
The key fix: changing "type": "array" to "type": "object" and adding a required array so it's explicit what the root document needs.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Locate the inbound JSON-RPC decoding entry point and trace the internal methods that consume decoded messages. Verify how object and array semantics reach Opis\JsonSchema\Validator, then update the affected paths so object values remain stdClass instances and validation succeeds for object-typed tool parameters.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- api, backend
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100