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
mcp-types
Types for Model Context Protocol. Inspired by https://crates.io/crates/lsp-types.
As documented on https://modelcontextprotocol.io/specification/2025-03-26/basic:
- TypeScript schema is the source of truth: https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/2025-03-26/schema.ts
- JSON schema is amenable to automated tooling: https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/2025-03-26/schema.json