chore(mcp): Add helpers to parse parameters (#2821)

Signed-off-by: Colin Walters <walters@verbum.org>
This commit is contained in:
Colin Walters
2025-08-03 04:51:36 -04:00
committed by GitHub
parent da8f64b370
commit 412ceb8128
4 changed files with 41 additions and 33 deletions
+30 -1
View File
@@ -1,6 +1,6 @@
use serde::{Deserialize, Serialize};
#[allow(unused_imports)] // this is used in schema below
use serde_json::json;
use serde_json::{json, Value};
use thiserror::Error;
#[non_exhaustive]
@@ -35,3 +35,32 @@ pub enum PromptError {
#[error("Prompt not found: {0}")]
NotFound(String),
}
/// Helper function to require a string, returning a ToolError
pub fn require_str_parameter<'a>(
v: &'a serde_json::Value,
name: &str,
) -> Result<&'a str, ToolError> {
let v = v
.get(name)
.ok_or_else(|| ToolError::InvalidParameters(format!("The parameter {name} is required")))?;
match v.as_str() {
Some(r) => Ok(r),
None => Err(ToolError::InvalidParameters(format!(
"The parameter {name} must be a string"
))),
}
}
/// Helper function to require a u64, returning a ToolError
pub fn require_u64_parameter(v: &serde_json::Value, name: &str) -> Result<u64, ToolError> {
let v = v
.get(name)
.ok_or_else(|| ToolError::InvalidParameters(format!("The parameter {name} is required")))?;
match v.as_u64() {
Some(r) => Ok(r),
None => Err(ToolError::InvalidParameters(format!(
"The parameter {name} must be a number"
))),
}
}