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    pub handler: VmClosure,
23}
24
25/// A static resource to serve over MCP.
26pub struct McpResourceDef {
27    pub uri: String,
28    pub name: String,
29    pub title: Option<String>,
30    pub description: Option<String>,
31    pub mime_type: Option<String>,
32    pub text: String,
33}
34
35/// A parameterized resource template (RFC 6570 URI template).
36pub struct McpResourceTemplateDef {
37    pub uri_template: String,
38    pub name: String,
39    pub title: Option<String>,
40    pub description: Option<String>,
41    pub mime_type: Option<String>,
42    pub completions: BTreeMap<String, McpCompletionSource>,
43    pub handler: VmClosure,
44}
45
46/// Static or computed suggestions for a prompt/resource-template argument.
47#[derive(Default)]
48pub struct McpCompletionSource {
49    pub values: Vec<String>,
50    pub handler: Option<VmClosure>,
51}
52
53/// A prompt argument definition.
54pub struct McpPromptArgDef {
55    pub name: String,
56    pub description: Option<String>,
57    pub required: bool,
58    pub completion: Option<McpCompletionSource>,
59}
60
61/// A prompt template to serve over MCP.
62pub struct McpPromptDef {
63    pub name: String,
64    pub title: Option<String>,
65    pub description: Option<String>,
66    pub arguments: Option<Vec<McpPromptArgDef>>,
67    pub handler: VmClosure,
68}