MCP Service
The MCP service (pkg/mcp) implements the Model Context Protocol, enabling AI assistants like Claude to interact with your application.
Overview
MCP provides a standardized way for AI tools to:
- Execute operations in your application
- Query application state
- Interact with the UI
- Manage files and processes
Basic Setup
import "github.com/Snider/Core/pkg/mcp"
// Create standalone MCP server
mcpService := mcp.NewStandaloneWithPort(9877)
// Or integrate with Core
c, _ := core.New(
core.WithService(mcp.NewService),
)
Available Tools
The MCP service exposes numerous tools organized by category:
File Operations
| Tool | Description |
|---|---|
file_read |
Read file contents |
file_write |
Write content to file |
file_edit |
Replace text in file |
file_delete |
Delete a file |
file_exists |
Check if file exists |
dir_list |
List directory contents |
dir_create |
Create directory |
Window Control
| Tool | Description |
|---|---|
window_list |
List all windows |
window_create |
Create new window |
window_close |
Close window |
window_position |
Move window |
window_size |
Resize window |
window_maximize |
Maximize window |
window_minimize |
Minimize window |
window_focus |
Bring to front |
WebView Interaction
| Tool | Description |
|---|---|
webview_eval |
Execute JavaScript |
webview_click |
Click element |
webview_type |
Type into element |
webview_screenshot |
Capture page |
webview_navigate |
Navigate to URL |
webview_console |
Get console logs |
Process Management
| Tool | Description |
|---|---|
process_start |
Start a process |
process_stop |
Stop a process |
process_list |
List running processes |
process_output |
Get process output |
HTTP API
The MCP service exposes an HTTP API:
# Health check
curl http://localhost:9877/health
# List available tools
curl http://localhost:9877/mcp/tools
# Call a tool
curl -X POST http://localhost:9877/mcp/call \
-H "Content-Type: application/json" \
-d '{"tool": "window_list", "params": {}}'
WebSocket Events
Connect to /events for real-time updates:
const ws = new WebSocket('ws://localhost:9877/events');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Event:', data.type, data.data);
};
Integration with Display Service
mcpService := mcp.NewStandaloneWithPort(9877)
mcpService.SetDisplay(displayService)
mcpService.SetWebView(webviewService)
Example: Claude Integration
When Claude connects via MCP, it can:
User: "Move the settings window to the left side of the screen"
Claude uses: window_position("settings", 0, 100)
Security Considerations
- MCP server binds to localhost by default
- No authentication (designed for local AI assistants)
- Consider firewall rules for production