mcp_core_rs/utils/
parse_message.rs1use mcp_error_rs::{Error, Result};
2
3use crate::protocol::{
4 constants::{JSONRPC_EXPECTED_VERSION, JSONRPC_VERSION_FIELD},
5 message::JsonRpcMessage,
6};
7
8pub fn parse_json_rpc_message(line: &str) -> Result<JsonRpcMessage> {
10 let value: serde_json::Value = serde_json::from_str(line)?;
11 if !value.is_object() {
12 return Err(Error::InvalidMessage(
13 "Message must be a JSON object".into(),
14 ));
15 }
16 let obj = value.as_object().unwrap();
17
18 match obj.get(JSONRPC_VERSION_FIELD) {
19 Some(serde_json::Value::String(v)) if v == JSONRPC_EXPECTED_VERSION => {}
20 _ => {
21 return Err(Error::InvalidMessage(
22 "Missing or invalid jsonrpc version".into(),
23 ));
24 }
25 }
26
27 let msg = serde_json::from_value(value)?;
28 Ok(msg)
29}