Code Sandbox MCP
- code-sandbox-mcp
- src
- code-sandbox-mcp
- installer
package installer
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
"runtime"
)
// MCPConfig represents the Claude Desktop config file structure
type MCPConfig struct {
MCPServers map[string]MCPServer `json:"mcpServers"`
}
// MCPServer represents a single MCP server configuration
type MCPServer struct {
Command string `json:"command"`
Args []string `json:"args"`
Env map[string]string `json:"env"`
}
func InstallConfig() error {
configPath, err := getConfigPath()
if err != nil {
return err
}
// Create config directory if it doesn't exist
configDir := filepath.Dir(configPath)
if err := os.MkdirAll(configDir, 0755); err != nil {
return fmt.Errorf("failed to create config directory: %w", err)
}
// Get the absolute path of the current executable
execPath, err := os.Executable()
if err != nil {
return fmt.Errorf("failed to get executable path: %w", err)
}
execPath, err = filepath.Abs(execPath)
if err != nil {
return fmt.Errorf("failed to get absolute path: %w", err)
}
var config MCPConfig
if _, err := os.Stat(configPath); err == nil {
// Read existing config
configData, err := os.ReadFile(configPath)
if err != nil {
return fmt.Errorf("failed to read config file: %w", err)
}
if err := json.Unmarshal(configData, &config); err != nil {
return fmt.Errorf("failed to parse config file: %w", err)
}
} else {
// Create new config
config = MCPConfig{
MCPServers: make(map[string]MCPServer),
}
}
// Add or update our server config
var command string
if runtime.GOOS == "windows" {
command = "cmd"
config.MCPServers["code-sandbox-mcp"] = MCPServer{
Command: command,
Args: []string{"/c", execPath},
Env: map[string]string{},
}
} else {
config.MCPServers["code-sandbox-mcp"] = MCPServer{
Command: execPath,
Args: []string{},
Env: map[string]string{},
}
}
// Write the updated config
configData, err := json.MarshalIndent(config, "", " ")
if err != nil {
return fmt.Errorf("failed to marshal config: %w", err)
}
if err := os.WriteFile(configPath, configData, 0644); err != nil {
return fmt.Errorf("failed to write config file: %w", err)
}
fmt.Printf("Added code-sandbox-mcp to %s\n", configPath)
return nil
}
func getConfigPath() (string, error) {
homeDir, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("failed to get user home directory: %w", err)
}
var configDir string
switch runtime.GOOS {
case "darwin":
configDir = filepath.Join(homeDir, "Library", "Application Support", "Claude")
case "windows":
configDir = filepath.Join(os.Getenv("APPDATA"), "Claude")
default: // linux and others
configDir = filepath.Join(homeDir, ".config", "Claude")
}
return filepath.Join(configDir, "claude_desktop_config.json"), nil
}