mcp_execution_files/lib.rs
1//! Virtual filesystem for MCP tools.
2//!
3//! Provides an in-memory, read-only virtual filesystem for storing and
4//! accessing generated MCP tool definitions. Files are organized in a
5//! hierarchical structure like `/mcp-tools/servers/<server-id>/...`.
6//!
7//! # Features
8//!
9//! - **In-memory storage**: All files stored in memory for fast access
10//! - **Strong types**: Type-safe paths and error handling
11//! - **Builder pattern**: Fluent API for VFS construction
12//! - **Integration**: Works seamlessly with `mcp-codegen` output
13//! - **Thread-safe**: All types are `Send + Sync`
14//!
15//! # Examples
16//!
17//! ## Basic usage
18//!
19//! ```
20//! use mcp_execution_files::{FileSystem, FilesBuilder};
21//!
22//! // Create FileSystem using builder
23//! let fs = FilesBuilder::new()
24//! .add_file("/mcp-tools/manifest.json", "{}")
25//! .add_file("/mcp-tools/types.ts", "export type Params = {};")
26//! .build()
27//! .unwrap();
28//!
29//! // Read files
30//! let content = fs.read_file("/mcp-tools/manifest.json").unwrap();
31//! assert_eq!(content, "{}");
32//!
33//! // Check existence
34//! assert!(fs.exists("/mcp-tools/types.ts"));
35//! assert!(!fs.exists("/missing.ts"));
36//! ```
37//!
38//! ## Integration with code generation
39//!
40//! ```
41//! use mcp_execution_files::FilesBuilder;
42//! use mcp_execution_codegen::{GeneratedCode, GeneratedFile};
43//!
44//! let mut code = GeneratedCode::new();
45//! code.add_file(GeneratedFile {
46//! path: "manifest.json".to_string(),
47//! content: r#"{"version": "1.0"}"#.to_string(),
48//! });
49//! code.add_file(GeneratedFile {
50//! path: "tools/sendMessage.ts".to_string(),
51//! content: "export function sendMessage() {}".to_string(),
52//! });
53//!
54//! let vfs = FilesBuilder::from_generated_code(code, "/mcp-tools/servers/github")
55//! .build()
56//! .unwrap();
57//!
58//! assert!(vfs.exists("/mcp-tools/servers/github/manifest.json"));
59//! assert!(vfs.exists("/mcp-tools/servers/github/tools/sendMessage.ts"));
60//! ```
61//!
62//! ## Directory operations
63//!
64//! ```
65//! use mcp_execution_files::FilesBuilder;
66//!
67//! let vfs = FilesBuilder::new()
68//! .add_file("/mcp-tools/servers/test/file1.ts", "")
69//! .add_file("/mcp-tools/servers/test/file2.ts", "")
70//! .build()
71//! .unwrap();
72//!
73//! let files = vfs.list_dir("/mcp-tools/servers/test").unwrap();
74//! assert_eq!(files.len(), 2);
75//! ```
76
77#![deny(unsafe_code)]
78#![warn(missing_docs, missing_debug_implementations)]
79
80pub mod builder;
81pub mod filesystem;
82pub mod types;
83
84// Re-export main types
85pub use builder::FilesBuilder;
86pub use filesystem::{ExportOptions, FileSystem};
87pub use types::{FileEntry, FilePath, FilesError, Result};