fix: mcp-types serialization wasn't quite working (#791)
While creating a basic MCP server in https://github.com/openai/codex/pull/792, I discovered a number of bugs with the initial `mcp-types` crate that I needed to fix in order to implement the server. For example, I discovered that when serializing a message, `"jsonrpc": "2.0"` was not being included. I changed the codegen so that the field is added as: ```rust #[serde(rename = "jsonrpc", default = "default_jsonrpc")] pub jsonrpc: String, ``` This ensures that the field is serialized as `"2.0"`, though the field still has to be assigned, which is tedious. I may experiment with `Default` or something else in the future. (I also considered creating a custom serializer, but I'm not sure it's worth the trouble.) While here, I also added `MCP_SCHEMA_VERSION` and `JSONRPC_VERSION` as `pub const`s for the crate. I also discovered that MCP rejects sending `null` for optional fields, so I had to add `#[serde(skip_serializing_if = "Option::is_none")]` on `Option` fields. --- [//]: # (BEGIN SAPLING FOOTER) Stack created with [Sapling](https://sapling-scm.com). Best reviewed with [ReviewStack](https://reviewstack.dev/openai/codex/pull/791). * #792 * __->__ #791
This commit is contained in:
@@ -5,6 +5,7 @@ use mcp_types::InitializeRequestParams;
|
||||
use mcp_types::JSONRPCMessage;
|
||||
use mcp_types::JSONRPCRequest;
|
||||
use mcp_types::RequestId;
|
||||
use mcp_types::JSONRPC_VERSION;
|
||||
use serde_json::json;
|
||||
|
||||
#[test]
|
||||
@@ -30,6 +31,7 @@ fn deserialize_initialize_request() {
|
||||
};
|
||||
|
||||
let expected_req = JSONRPCRequest {
|
||||
jsonrpc: JSONRPC_VERSION.into(),
|
||||
id: RequestId::Integer(1),
|
||||
method: "initialize".into(),
|
||||
params: Some(json!({
|
||||
|
||||
Reference in New Issue
Block a user