Skip to main content

harn_vm/mcp_server/
defs.rs

1use std::collections::BTreeMap;
2
3use crate::value::VmClosure;
4
5/// Script-supplied metadata for a Harn-served MCP endpoint.
6#[derive(Clone, Debug, Default, Eq, PartialEq)]
7pub struct McpServerMetadata {
8    pub name: Option<String>,
9    pub version: Option<String>,
10    pub instructions: Option<String>,
11}
12
13/// A tool extracted from a Harn tool_registry, ready to serve over MCP.
14pub struct McpToolDef {
15    pub name: String,
16    pub title: Option<String>,
17    pub description: String,
18    pub input_schema: serde_json::Value,
19    pub output_schema: Option<serde_json::Value>,
20    pub annotations: Option<serde_json::Value>,
21    pub icons: Option<serde_json::Value>,
22    /// Protocol extension metadata projected as the MCP `_meta` field.
23    pub meta: Option<serde_json::Value>,
24    /// Whether the client may invoke this tool as an MCP task, declared in the
25    /// registry as `execution: {taskSupport: "optional"}`. Defaults to
26    /// `Forbidden`, so the tasks extension never changes an existing tool.
27    pub task_support: crate::mcp_tasks::McpTaskSupport,
28    pub handler: VmClosure,
29}
30
31/// A static resource to serve over MCP.
32pub struct McpResourceDef {
33    pub uri: String,
34    pub name: String,
35    pub title: Option<String>,
36    pub description: Option<String>,
37    pub mime_type: Option<String>,
38    /// Protocol extension metadata projected on both discovery and content.
39    pub meta: Option<serde_json::Value>,
40    pub text: String,
41}
42
43/// A parameterized resource template (RFC 6570 URI template).
44pub struct McpResourceTemplateDef {
45    pub uri_template: String,
46    pub name: String,
47    pub title: Option<String>,
48    pub description: Option<String>,
49    pub mime_type: Option<String>,
50    pub completions: BTreeMap<String, McpCompletionSource>,
51    pub handler: VmClosure,
52}
53
54/// Static or computed suggestions for a prompt/resource-template argument.
55#[derive(Default)]
56pub struct McpCompletionSource {
57    pub values: Vec<String>,
58    pub handler: Option<VmClosure>,
59}
60
61/// A prompt argument definition.
62pub struct McpPromptArgDef {
63    pub name: String,
64    pub description: Option<String>,
65    pub required: bool,
66    pub completion: Option<McpCompletionSource>,
67}
68
69/// A prompt template to serve over MCP.
70pub struct McpPromptDef {
71    pub name: String,
72    pub title: Option<String>,
73    pub description: Option<String>,
74    pub arguments: Option<Vec<McpPromptArgDef>>,
75    pub handler: VmClosure,
76}