all repos — mcp-todotxt @ 95843561d03ec718c9a7088b6f3c885d0b7d66ce

MCP server to manage todo.txt file

feat: 🔒️ Add token authentication
Tim Izzo tim@5ika.ch
Tue, 23 Dec 2025 14:28:47 +0100
commit

95843561d03ec718c9a7088b6f3c885d0b7d66ce

parent

685c6e4b50ab4587940871ca263637628310e21d

3 files changed, 28 insertions(+), 1 deletions(-)

jump to
A auth.go

@@ -0,0 +1,22 @@

+package main + +import ( + "context" + "fmt" + "log" + + "github.com/modelcontextprotocol/go-sdk/mcp" +) + +func createAuthMiddleware(token string) mcp.Middleware { + log.Println("Use auth token") + return func(next mcp.MethodHandler) mcp.MethodHandler { + return func(ctx context.Context, method string, req mcp.Request) (mcp.Result, error) { + authHeader := req.GetExtra().Header.Get("Authorization") + if authHeader != "Bearer "+token { + return nil, fmt.Errorf("unauthorized") + } + return next(ctx, method, req) + } + } +}
M go.modgo.mod

@@ -1,4 +1,4 @@

-module 5ika/mcp-todo.txt +module 5ika/mcp-todotxt go 1.25.5
M main.gomain.go

@@ -13,6 +13,7 @@ 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() {

@@ -25,6 +26,10 @@ Version: "1.0.0",

}, nil) server.AddReceivingMiddleware(createLoggingMiddleware()) + + if *authToken != "" { + server.AddReceivingMiddleware(createAuthMiddleware(*authToken)) + } mcp.AddTool(server, &mcp.Tool{ Name: "listTasks",