package main import ( "flag" "fmt" "log" "net/http" "github.com/modelcontextprotocol/go-sdk/mcp" ) var ( host = flag.String("host", "localhost", "host to connect to/listen on") port = flag.Int("port", 8080, "port number to connect to/listen on") todoFilePath = flag.String("file", "./todo.txt", "path to todo.txt") authToken = flag.String("token", "", "Authentication token") ) func main() { flag.Parse() url := fmt.Sprintf("%s:%d", *host, *port) server := mcp.NewServer(&mcp.Implementation{ Name: "5ika-mpc-todo.txt", Version: "1.0.0", }, nil) server.AddReceivingMiddleware(createLoggingMiddleware()) if *authToken != "" { server.AddReceivingMiddleware(createAuthMiddleware(*authToken)) } mcp.AddTool(server, &mcp.Tool{ Name: "listTasks", Description: "List tasks in todo.txt file", }, getTasks) mcp.AddTool(server, &mcp.Tool{ Name: "addTask", Description: "Add new task in todo.txt file", }, addTask) mcp.AddTool(server, &mcp.Tool{ Name: "checkTask", Description: "Set task as completed, done or finished in todo.txt file", }, checkTask) handler := mcp.NewStreamableHTTPHandler(func(req *http.Request) *mcp.Server { return server }, nil) log.Printf("MCP server listening on %s", url) if err := http.ListenAndServe(url, handler); err != nil { log.Fatalf("Server failed: %v", err) } }