A Model Context Protocol (MCP) server implementation that provides AI assistant capabilities with comprehensive system tools.
This MCP server enables seamless integration with AI models through the Model Context Protocol, offering a standardized way to interact with AI assistants and manage context effectively. Built with Go for high performance and reliability.
- MCP Protocol Support: Full implementation of the Model Context Protocol using mark3labs/mcp-go
- Security-First Design: Configurable command blocking and directory access controls
- System Integration: Terminal command execution with safety controls
- File System Operations: Secure file reading, writing, and manipulation
- Text Editing Tools: Advanced text editing capabilities with line-based operations
- HTTP Fetch Tools: Built-in web content fetching capabilities
- Configuration Management: Runtime configuration updates via MCP tools
- Go Implementation: High-performance server written in Go with robust error handling
- Go 1.24.4 or later
- Git
- Clone the repository:
git clone (https://github.com/can-acar/jarvis)
cd jarvis- Install dependencies:
go mod download- Build the project:
go build -o jarvis main.go./jarvisThe server will start and communicate via stdio using the MCP protocol.
The server uses a config.yaml file for configuration:
# Security settings
blockedCommands:
- rm
- shutdown
# Default shell for command execution
defaultShell: bash
# Allowed directories for file operations
allowedDirectories:
- /tmp
- /var/log
# File operation limits
fileReadLineLimit: 1000
fileWriteLineLimit: 50
# Telemetry
telemetryEnabled: falseThe server provides the following MCP tools:
get-config- Retrieve current server configurationset-config- Update server configuration values
execute-command- Execute shell commands with security controlsget-command-history- Retrieve command execution history
read-file- Read file contents with pagination supportwrite-file- Write content to fileslist-directory- List directory contentscreate-directory- Create new directoriesdelete-file- Delete files and directoriesmove-file- Move/rename files and directoriesfile-info- Get file metadata and information
edit-file- Perform complex text editing operationssearch-replace- Search and replace text in filesbatch-edit- Apply multiple edits to files
fetch-url- Fetch content from web URLsdownload-file- Download files from remote sources
jarvis/
├── main.go # Main server entry point
├── config.yaml # Server configuration
├── go.mod # Go module definition
├── go.sum # Go module checksums
├── handlers/ # MCP tool handlers
│ ├── config_handler.go # Configuration management
│ ├── terminal_handler.go # Terminal operations
│ ├── filesystem_handler.go # File system operations
│ ├── textediting_handler.go # Text editing tools
│ └── fetch_handler.go # HTTP fetch operations
└── internal/ # Internal packages
├── common/ # Shared utilities
├── config/ # Configuration management
├── terminal/ # Terminal utilities
├── filesystem/ # File system utilities
├── textedit/ # Text editing utilities
├── fetch/ # Fetch utilities
└── types/ # Type definitions
# Build the project
go build -o jarvis main.go
# Run tests
go test ./...
# Run with verbose logging
go run main.go
# Build for different platforms
GOOS=windows GOARCH=amd64 go build -o jarvis.exe main.go
GOOS=linux GOARCH=amd64 go build -o jarvis-linux main.goTo add new MCP tools:
- Create a handler function in the appropriate handler file:
func HandleNewTool(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
// Implementation here
return mcp.NewToolResultText("Result"), nil
}- Register the tool in the corresponding internal package:
func RegisterNewTools(s *server.MCPServer) {
s.AddTool("new-tool", "Description", map[string]interface{}{
"type": "object",
"properties": map[string]interface{}{
"param": map[string]interface{}{
"type": "string",
"description": "Parameter description",
},
},
"required": []string{"param"},
}, handlers.HandleNewTool)
}- Call the registration function in
main.go.
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes and add tests
- Ensure code follows Go conventions:
go fmt ./... - Run tests:
go test ./... - Commit your changes:
git commit -m 'Add feature' - Push to the branch:
git push origin feature-name - Submit a pull request
- Commands are sanitized and checked against blocked patterns
- File system access is restricted to allowed directories
- Command execution includes timeout controls
- All operations are logged for audit purposes
- Configuration can restrict dangerous operations
- mark3labs/mcp-go: MCP protocol implementation for Go
- google/uuid: UUID generation
- spf13/cast: Type casting utilities
The server implements the following MCP capabilities:
- Tools: Execute system operations (file I/O, terminal commands, etc.)
- Resources: Access to file system resources with proper access controls
- Prompts: Template-based prompt management
- System Tools: Terminal command execution, process management
- File Tools: File operations with security boundaries
- Text Tools: Advanced text manipulation and editing
- Network Tools: HTTP requests and content fetching
- Config Tools: Runtime configuration management
This project is licensed under the MIT License - see the LICENSE file for details.
For support and questions:
- Create an issue on GitHub
- Check the documentation and code comments
- Review existing issues and discussions
- Built with Go for high concurrency and performance
- Efficient file operations with configurable limits
- Memory-conscious design for large file handling
- Optimized for MCP protocol communication over stdio