Skip to content

Commit 6c3ff33

Browse files
committed
chore: bump version to 0.4.0 and clean up whitespace
1 parent 9c2062b commit 6c3ff33

File tree

1 file changed

+39
-39
lines changed

1 file changed

+39
-39
lines changed

main.go

+39-39
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func NewFilesystemServer(allowedDirs []string) (*FilesystemServer, error) {
6868
allowedDirs: normalized,
6969
server: server.NewMCPServer(
7070
"secure-filesystem-server",
71-
"0.3.0",
71+
"0.4.0",
7272
server.WithResourceCapabilities(true, true),
7373
),
7474
}
@@ -171,7 +171,7 @@ func (s *FilesystemServer) isPathInAllowedDirs(path string) bool {
171171
if err != nil {
172172
return false
173173
}
174-
174+
175175
// Add trailing separator to ensure we're checking a directory or a file within a directory
176176
// and not a prefix match (e.g., /tmp/foo should not match /tmp/foobar)
177177
if !strings.HasSuffix(absPath, string(filepath.Separator)) {
@@ -217,7 +217,7 @@ func (s *FilesystemServer) validatePath(requestedPath string) (string, error) {
217217
if err != nil {
218218
return "", fmt.Errorf("parent directory does not exist: %s", parent)
219219
}
220-
220+
221221
if !s.isPathInAllowedDirs(realParent) {
222222
return "", fmt.Errorf(
223223
"access denied - parent directory outside allowed directories",
@@ -232,7 +232,7 @@ func (s *FilesystemServer) validatePath(requestedPath string) (string, error) {
232232
"access denied - symlink target outside allowed directories",
233233
)
234234
}
235-
235+
236236
return realPath, nil
237237
}
238238

@@ -334,54 +334,54 @@ func (s *FilesystemServer) handleReadResource(
334334
request mcp.ReadResourceRequest,
335335
) ([]mcp.ResourceContents, error) {
336336
uri := request.Params.URI
337-
337+
338338
// Check if it's a file:// URI
339339
if !strings.HasPrefix(uri, "file://") {
340340
return nil, fmt.Errorf("unsupported URI scheme: %s", uri)
341341
}
342-
342+
343343
// Extract the path from the URI
344344
path := strings.TrimPrefix(uri, "file://")
345-
345+
346346
// Validate the path
347347
validPath, err := s.validatePath(path)
348348
if err != nil {
349349
return nil, err
350350
}
351-
351+
352352
// Get file info
353353
fileInfo, err := os.Stat(validPath)
354354
if err != nil {
355355
return nil, err
356356
}
357-
357+
358358
// If it's a directory, return a listing
359359
if fileInfo.IsDir() {
360360
entries, err := os.ReadDir(validPath)
361361
if err != nil {
362362
return nil, err
363363
}
364-
364+
365365
var result strings.Builder
366366
result.WriteString(fmt.Sprintf("Directory listing for: %s\n\n", validPath))
367-
367+
368368
for _, entry := range entries {
369369
entryPath := filepath.Join(validPath, entry.Name())
370370
entryURI := pathToResourceURI(entryPath)
371-
371+
372372
if entry.IsDir() {
373373
result.WriteString(fmt.Sprintf("[DIR] %s (%s)\n", entry.Name(), entryURI))
374374
} else {
375375
info, err := entry.Info()
376376
if err == nil {
377-
result.WriteString(fmt.Sprintf("[FILE] %s (%s) - %d bytes\n",
377+
result.WriteString(fmt.Sprintf("[FILE] %s (%s) - %d bytes\n",
378378
entry.Name(), entryURI, info.Size()))
379379
} else {
380380
result.WriteString(fmt.Sprintf("[FILE] %s (%s)\n", entry.Name(), entryURI))
381381
}
382382
}
383383
}
384-
384+
385385
return []mcp.ResourceContents{
386386
mcp.TextResourceContents{
387387
URI: uri,
@@ -390,10 +390,10 @@ func (s *FilesystemServer) handleReadResource(
390390
},
391391
}, nil
392392
}
393-
393+
394394
// It's a file, determine how to handle it
395395
mimeType := detectMimeType(validPath)
396-
396+
397397
// Check file size
398398
if fileInfo.Size() > MAX_INLINE_SIZE {
399399
// File is too large to inline, return a reference instead
@@ -405,13 +405,13 @@ func (s *FilesystemServer) handleReadResource(
405405
},
406406
}, nil
407407
}
408-
408+
409409
// Read the file content
410410
content, err := os.ReadFile(validPath)
411411
if err != nil {
412412
return nil, err
413413
}
414-
414+
415415
// Handle based on content type
416416
if isTextFile(mimeType) {
417417
// It's a text file, return as text
@@ -483,7 +483,7 @@ func (s *FilesystemServer) handleReadFile(
483483
IsError: true,
484484
}, nil
485485
}
486-
486+
487487
if info.IsDir() {
488488
// For directories, return a resource reference instead
489489
resourceURI := pathToResourceURI(validPath)
@@ -507,7 +507,7 @@ func (s *FilesystemServer) handleReadFile(
507507

508508
// Determine MIME type
509509
mimeType := detectMimeType(validPath)
510-
510+
511511
// Check file size
512512
if info.Size() > MAX_INLINE_SIZE {
513513
// File is too large to inline, return a resource reference
@@ -558,7 +558,7 @@ func (s *FilesystemServer) handleReadFile(
558558
} else {
559559
// It's a binary file
560560
resourceURI := pathToResourceURI(validPath)
561-
561+
562562
if info.Size() <= MAX_BASE64_SIZE {
563563
// Small enough for base64 encoding
564564
return &mcp.CallToolResult{
@@ -732,7 +732,7 @@ func (s *FilesystemServer) handleListDirectory(
732732
IsError: true,
733733
}, nil
734734
}
735-
735+
736736
if !info.IsDir() {
737737
return &mcp.CallToolResult{
738738
Content: []mcp.Content{
@@ -760,17 +760,17 @@ func (s *FilesystemServer) handleListDirectory(
760760

761761
var result strings.Builder
762762
result.WriteString(fmt.Sprintf("Directory listing for: %s\n\n", validPath))
763-
763+
764764
for _, entry := range entries {
765765
entryPath := filepath.Join(validPath, entry.Name())
766766
resourceURI := pathToResourceURI(entryPath)
767-
767+
768768
if entry.IsDir() {
769769
result.WriteString(fmt.Sprintf("[DIR] %s (%s)\n", entry.Name(), resourceURI))
770770
} else {
771771
info, err := entry.Info()
772772
if err == nil {
773-
result.WriteString(fmt.Sprintf("[FILE] %s (%s) - %d bytes\n",
773+
result.WriteString(fmt.Sprintf("[FILE] %s (%s) - %d bytes\n",
774774
entry.Name(), resourceURI, info.Size()))
775775
} else {
776776
result.WriteString(fmt.Sprintf("[FILE] %s (%s)\n", entry.Name(), resourceURI))
@@ -908,7 +908,7 @@ func (s *FilesystemServer) handleMoveFile(
908908
IsError: true,
909909
}, nil
910910
}
911-
911+
912912
// Check if source exists
913913
if _, err := os.Stat(validSource); os.IsNotExist(err) {
914914
return &mcp.CallToolResult{
@@ -921,7 +921,7 @@ func (s *FilesystemServer) handleMoveFile(
921921
IsError: true,
922922
}, nil
923923
}
924-
924+
925925
validDest, err := s.validatePath(destination)
926926
if err != nil {
927927
return &mcp.CallToolResult{
@@ -934,7 +934,7 @@ func (s *FilesystemServer) handleMoveFile(
934934
IsError: true,
935935
}, nil
936936
}
937-
937+
938938
// Create parent directory for destination if it doesn't exist
939939
destDir := filepath.Dir(validDest)
940940
if err := os.MkdirAll(destDir, 0755); err != nil {
@@ -1009,7 +1009,7 @@ func (s *FilesystemServer) handleSearchFiles(
10091009
IsError: true,
10101010
}, nil
10111011
}
1012-
1012+
10131013
// Check if it's a directory
10141014
info, err := os.Stat(validPath)
10151015
if err != nil {
@@ -1023,7 +1023,7 @@ func (s *FilesystemServer) handleSearchFiles(
10231023
IsError: true,
10241024
}, nil
10251025
}
1026-
1026+
10271027
if !info.IsDir() {
10281028
return &mcp.CallToolResult{
10291029
Content: []mcp.Content{
@@ -1064,15 +1064,15 @@ func (s *FilesystemServer) handleSearchFiles(
10641064
// Format results with resource URIs
10651065
var formattedResults strings.Builder
10661066
formattedResults.WriteString(fmt.Sprintf("Found %d results:\n\n", len(results)))
1067-
1067+
10681068
for _, result := range results {
10691069
resourceURI := pathToResourceURI(result)
10701070
info, err := os.Stat(result)
10711071
if err == nil {
10721072
if info.IsDir() {
10731073
formattedResults.WriteString(fmt.Sprintf("[DIR] %s (%s)\n", result, resourceURI))
10741074
} else {
1075-
formattedResults.WriteString(fmt.Sprintf("[FILE] %s (%s) - %d bytes\n",
1075+
formattedResults.WriteString(fmt.Sprintf("[FILE] %s (%s) - %d bytes\n",
10761076
result, resourceURI, info.Size()))
10771077
}
10781078
} else {
@@ -1132,15 +1132,15 @@ func (s *FilesystemServer) handleGetFileInfo(
11321132
}
11331133

11341134
resourceURI := pathToResourceURI(validPath)
1135-
1135+
11361136
// Determine file type text
11371137
var fileTypeText string
11381138
if info.IsDirectory {
11391139
fileTypeText = "Directory"
11401140
} else {
11411141
fileTypeText = "File"
11421142
}
1143-
1143+
11441144
return &mcp.CallToolResult{
11451145
Content: []mcp.Content{
11461146
mcp.TextContent{
@@ -1164,10 +1164,10 @@ func (s *FilesystemServer) handleGetFileInfo(
11641164
Resource: mcp.TextResourceContents{
11651165
URI: resourceURI,
11661166
MIMEType: "text/plain",
1167-
Text: fmt.Sprintf("%s: %s (%s, %d bytes)",
1168-
fileTypeText,
1169-
validPath,
1170-
mimeType,
1167+
Text: fmt.Sprintf("%s: %s (%s, %d bytes)",
1168+
fileTypeText,
1169+
validPath,
1170+
mimeType,
11711171
info.Size),
11721172
},
11731173
},
@@ -1187,7 +1187,7 @@ func (s *FilesystemServer) handleListAllowedDirectories(
11871187

11881188
var result strings.Builder
11891189
result.WriteString("Allowed directories:\n\n")
1190-
1190+
11911191
for _, dir := range displayDirs {
11921192
resourceURI := pathToResourceURI(dir)
11931193
result.WriteString(fmt.Sprintf("%s (%s)\n", dir, resourceURI))

0 commit comments

Comments
 (0)