Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
FileResource.cs
1using System;
3using System.IO;
4using System.Threading.Tasks;
5using Waher.Content;
9
11{
15 public class FileResource : Resource
16 {
17 private readonly string fileName;
18 private readonly bool isTextFile;
19
32 public FileResource(string Name, string Title, string Description, Uri Uri,
33 string FileName, params KeyValuePair<string, object>[] MetaData)
34 : base(Name, Title, Description, Uri, null, GetContentType(FileName), MetaData)
35 {
36 this.fileName = FileName;
37 this.isTextFile = this.IsTextFile();
38 }
39
40 private static string GetContentType(string FileName)
41 {
42 if (InternetContent.TryGetContentType(Path.GetExtension(FileName),
43 out string? ContentType))
44 {
45 return ContentType;
46 }
47 else
49 }
50
51 private bool IsTextFile()
52 {
53 return IsTextFile(this.ContentType);
54 }
55
61 public static bool IsTextFile(string? ContentType)
62 {
63 if (ContentType is null)
64 return false;
65 else if (ContentType.StartsWith("text/"))
66 return true;
67 else if (ContentType.StartsWith("application/"))
68 {
69 string s = ContentType;
70 int i = s.IndexOf(';', 12);
71 if (i > 0)
72 s = s[..i].TrimEnd();
73
74 if (s.EndsWith("xml") ||
75 s.EndsWith("json") ||
76 s.EndsWith("script") ||
77 s.EndsWith("tlv") ||
78 s.EndsWith("turtle") ||
79 s.EndsWith("latex"))
80 {
81 return true;
82 }
83 else
84 {
85 switch (s)
86 {
87 case "application/x-www-form-urlencoded":
88 case "application/link-format":
89 case "application/jwt":
90 case "application/sparql-query":
91 return true;
92
93 default:
94 return false;
95 }
96 }
97 }
98 else
99 return false;
100 }
101
117 public FileResource(string Name, string Title, string Description, Uri Uri,
118 string FileName, string? RequiredPrivilege,
119 params KeyValuePair<string, object>[] MetaData)
121 GetContentType(FileName), MetaData)
122 {
123 this.fileName = FileName;
124 this.isTextFile = this.IsTextFile();
125 }
126
145 public FileResource(string Name, string Title, string Description, Uri Uri,
146 string FileName, string? RequiredPrivilege, long? Size,
147 params KeyValuePair<string, object>[] MetaData)
149 GetContentType(FileName), Size, MetaData)
150 {
151 this.fileName = FileName;
152 this.isTextFile = this.IsTextFile();
153 }
154
174 public FileResource(string Name, string Title, string Description, Uri Uri,
175 string FileName, string? RequiredPrivilege, long? Size, Icon Icon,
176 params KeyValuePair<string, object>[] MetaData)
178 GetContentType(FileName), Size, Icon, MetaData)
179 {
180 this.fileName = FileName;
181 this.isTextFile = this.IsTextFile();
182 }
183
203 public FileResource(string Name, string Title, string Description, Uri Uri,
204 string FileName, string? RequiredPrivilege, long? Size, Icons? Icons,
205 params KeyValuePair<string, object>[] MetaData)
207 GetContentType(FileName), Size, Icons, MetaData)
208 {
209 this.fileName = FileName;
210 this.isTextFile = this.IsTextFile();
211 }
212
242 public FileResource(string Name, string Title, string Description, Uri Uri,
243 string FileName, string? RequiredPrivilege, long? Size, Icons? Icons,
244 McpRole[]? Audience, double? Priority, DateTime? LastModified,
245 params KeyValuePair<string, object>[] MetaData)
247 GetContentType(FileName), Size, Icons, Audience, Priority, LastModified,
248 MetaData)
249 {
250 this.fileName = FileName;
251 this.isTextFile = this.IsTextFile();
252 }
253
259 public override async Task<IResourceContent[]> Read(
260 Dictionary<string, object>? MetaData)
261 {
262 if (this.isTextFile)
263 {
264 string s = await Files.ReadAllTextAsync(this.fileName);
265
266 return new IResourceContent[]
267 {
268 new TextContent(this.Uri, s, this.ContentType, MetaData)
269 };
270 }
271 else
272 {
273 byte[] Bin = await Files.ReadAllBytesAsync(this.fileName);
274
275 return new IResourceContent[]
276 {
277 new BlobContent(this.Uri, Bin,
279 };
280 }
281 }
282 }
283}
const string DefaultContentType
text/plain
Definition: BinaryCodec.cs:24
Static class managing encoding and decoding of internet content.
static bool TryGetContentType(string FileExtension, out string ContentType)
Tries to get the content type of an item, given its file extension.
DateTime? LastModified
The moment the resource was last modified, as an ISO 8601 formatted string.
Definition: Annotations.cs:61
double? Priority
Describes how important this data is for operating the server.
Definition: Annotations.cs:53
McpRole?[] Audience
Describes who the intended audience of this object or data is.
Definition: Annotations.cs:44
An optionally-sized icon that can be displayed in a user interface.
Definition: Icon.cs:10
Base interface to add icons property.
Definition: Icons.cs:11
Contains information about an MCP Server File Resource
Definition: FileResource.cs:16
FileResource(string Name, string Title, string Description, Uri Uri, string FileName, string? RequiredPrivilege, long? Size, params KeyValuePair< string, object >[] MetaData)
Contains information about an MCP Server File Resource
FileResource(string Name, string Title, string Description, Uri Uri, string FileName, string? RequiredPrivilege, long? Size, Icon Icon, params KeyValuePair< string, object >[] MetaData)
Contains information about an MCP Server File Resource
FileResource(string Name, string Title, string Description, Uri Uri, string FileName, string? RequiredPrivilege, long? Size, Icons? Icons, McpRole[]? Audience, double? Priority, DateTime? LastModified, params KeyValuePair< string, object >[] MetaData)
Contains information about an MCP Server File Resource
FileResource(string Name, string Title, string Description, Uri Uri, string FileName, string? RequiredPrivilege, params KeyValuePair< string, object >[] MetaData)
Contains information about an MCP Server File Resource
FileResource(string Name, string Title, string Description, Uri Uri, string FileName, params KeyValuePair< string, object >[] MetaData)
Contains information about an MCP Server File Resource
Definition: FileResource.cs:32
static bool IsTextFile(string? ContentType)
Checks if a Content-Type represents a text file.
Definition: FileResource.cs:61
override async Task< IResourceContent[]> Read(Dictionary< string, object >? MetaData)
Reads the resource.
FileResource(string Name, string Title, string Description, Uri Uri, string FileName, string? RequiredPrivilege, long? Size, Icons? Icons, params KeyValuePair< string, object >[] MetaData)
Contains information about an MCP Server File Resource
Contains information about an MCP Server Resource
Definition: Resource.cs:14
string Title
A human-readable title for the prompt.
Definition: Resource.cs:211
KeyValuePair< string, object >[] MetaData
Meta-data associated with prompt.
Definition: Resource.cs:252
string? RequiredPrivilege
Privilege required to access the resource, if any. If null, no additional privilege is required.
Definition: Resource.cs:230
long? Size
The size of the raw resource content, in bytes (i.e., before base64 encoding or any tokenization),...
Definition: Resource.cs:242
string Description
A human-readable description of the prompt.
Definition: Resource.cs:219
string? ContentType
Content-Type of resource, if known.
Definition: Resource.cs:235
Contains static methods
Definition: Files.cs:14
static async Task< string > ReadAllTextAsync(string FileName)
Reads a text file asynchronously.
Definition: Files.cs:84
static async Task< byte[]> ReadAllBytesAsync(string FileName)
Reads a binary file asynchronously.
Definition: Files.cs:20
McpRole
Identifies a Role in a Model Context Protocol (MCP) context.
Definition: McpRole.cs:7