abelcha/mcpx
3.2
If you are the rightful owner of mcpx and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The Swift MCP Server, named `mcpx`, is a single binary application designed to handle filesystem, git, and HTTP fetch operations using the Model Context Protocol (MCP).
Tools
fs
Handles filesystem operations such as reading, writing, and listing files.
git
Manages git operations including status, add, commit, push, and pull.
fetch
Performs HTTP requests like GET, POST, PUT, and DELETE.
Swift MCP Server
Project Goal
Reimplement the 3 core MCP servers (filesystem, git, fetch) as a single Swift binary called mcpx
.
Why Swift?
- Single binary deployment (no Node.js dependency)
- Native macOS performance
- Clean, modern syntax
- Excellent Foundation library for filesystem/networking
- First-class MCP Swift SDK available
Architecture Overview
Single Binary, Multiple Tools
mcpx
āāā fs (filesystem operations)
āāā git (git operations)
āāā fetch (HTTP requests)
Command Structure
mcpx --allow-dir /path/to/project
# Exposes all three tool sets via MCP protocol
Core Requirements
1. Filesystem Server (fs
)
Tools to implement:
read_file
- Read file contents with UTF-8 encodingwrite_file
- Create/overwrite fileslist_directory
- List directory contents with [FILE]/[DIR] prefixescreate_directory
- Create directories recursivelymove_file
- Move/rename files and directoriessearch_files
- Recursive file search with pattern matchingget_file_info
- File metadata (size, dates, permissions)
Key APIs:
FileManager.default
for directory operationsString(contentsOf:)
andData.write(to:)
for file I/OFileManager.contentsOfDirectory(atPath:)
for listings
2. Git Server (git
)
Tools to implement:
git_status
- Show working directory statusgit_add
- Stage filesgit_commit
- Create commitsgit_push
- Push to remotegit_pull
- Pull from remotegit_log
- Show commit historygit_diff
- Show file differencesgit_branch
- Branch operations
Implementation approach:
- Use
Process
to execute git commands - Parse stdout/stderr for structured responses
- Handle git credential management
3. Fetch Server (fetch
)
Tools to implement:
http_get
- GET requests with headershttp_post
- POST requests with body/headershttp_put
- PUT requestshttp_delete
- DELETE requests
Key APIs:
URLSession
for HTTP requestsJSONSerialization
for JSON handling- Proper error handling for network failures
Project Structure
Sources/
āāā SwiftMCP/
ā āāā main.swift # Entry point
ā āāā MCPServer.swift # MCP protocol handling
ā āāā FilesystemTools.swift
ā āāā GitTools.swift
ā āāā FetchTools.swift
āāā Package.swift
Dependencies
// Package.swift
dependencies: [
.package(url: "https://github.com/modelcontextprotocol/swift-sdk", from: "1.0.0")
]
Security Requirements
- Path validation - Only allow operations within specified directories
- Git safety - Validate git commands to prevent injection
- HTTP limits - Reasonable timeouts and request size limits
- Error handling - Never expose internal system paths in errors
MCP Protocol Integration
- Use the official Swift MCP SDK
- Implement
ListToolsRequestSchema
handler - Implement
CallToolRequestSchema
handler - Follow MCP tool schema patterns from Node.js versions
Success Criteria
- Drop-in replacement - Same MCP tool interface as Node.js versions
- Single binary - No runtime dependencies
- Better performance - Faster than Node.js equivalents
- Clean error messages - User-friendly error handling
- Cross-platform - Works on macOS and Linux
Implementation Order
- Start with filesystem - Core functionality, easiest to test
- Add fetch - HTTP operations, good for testing network handling
- Finish with git - Most complex due to subprocess management
Testing Strategy
- Test against existing MCP clients (Claude Desktop)
- Compare output format with Node.js versions
- Test edge cases: large files, network failures, git errors
- Verify security boundaries work correctly
Key Differences from Node.js Version
- No async/await ceremony - Use Swift's structured concurrency
- Native error types - Proper Swift error handling vs JavaScript exceptions
- Type safety - Compile-time guarantees vs runtime schema validation
- Resource management - Automatic memory management vs manual cleanup