@@ -177,22 +177,66 @@ func NewMCPServer(config *Config) *server.MCPServer {
return handleCreateTask(ctx, request, config)
})
+ mcpServer.AddTool(
+ mcp.NewTool(
+ "list_areas",
+ mcp.WithDescription("List areas and their IDs."),
+ ),
+ func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
+ var b strings.Builder
+ b.WriteString("| Area Name | Area ID |\n|-----------|--------|\n")
+ for _, area := range config.Areas {
+ fmt.Fprintf(&b, "| %s | %s |\n", area.Name, area.ID)
+ }
+ return &mcp.CallToolResult{
+ Content: []mcp.Content{
+ mcp.TextContent{
+ Type: "text",
+ Text: b.String(),
+ },
+ },
+ }, nil
+ },
+ )
+
+ mcpServer.AddTool(
+ mcp.NewTool(
+ "list_goals",
+ mcp.WithDescription("List goals and their IDs."),
+ ),
+ func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
+ var b strings.Builder
+ b.WriteString("| Goal Name | Goal ID |\n|----------|--------|\n")
+ for _, goal := range config.Goals {
+ fmt.Fprintf(&b, "| %s | %s |\n", goal.Name, goal.ID)
+ }
+ return &mcp.CallToolResult{
+ Content: []mcp.Content{
+ mcp.TextContent{
+ Type: "text",
+ Text: b.String(),
+ },
+ },
+ }, nil
+ },
+ )
+
return mcpServer
}
// LunataskCreateTaskRequest represents the request payload for creating a task in Lunatask
type LunataskCreateTaskRequest struct {
AreaID string `json:"area_id"`
- GoalID string `json:"goal_id,omitempty"`
+ GoalID string `json:"goal_id,omitempty" validate:"omitempty"`
Name string `json:"name" validate:"max=100"`
- Note string `json:"note,omitempty"`
- Status string `json:"status,omitempty" validate:"oneof=later next started waiting completed"`
- Motivation string `json:"motivation,omitempty" validate:"oneof=must should want unknown"`
- Estimate int `json:"estimate,omitempty" validate:"min=0,max=720"`
- Priority int `json:"priority,omitempty" validate:"min=-2,max=2"`
- ScheduledOn string `json:"scheduled_on,omitempty"`
- CompletedAt string `json:"completed_at,omitempty"`
- Source string `json:"source,omitempty"`
+ Note string `json:"note,omitempty" validate:"omitempty"`
+ Status string `json:"status,omitempty" validate:"omitempty,oneof=later next started waiting completed"`
+ Motivation string `json:"motivation,omitempty" validate:"omitempty,oneof=must should want unknown"`
+ Estimate int `json:"estimate,omitempty" validate:"omitempty,min=0,max=720"`
+ Priority int `json:"priority,omitempty" validate:"omitempty,min=-2,max=2"`
+ ScheduledOn string `json:"scheduled_on,omitempty" validate:"omitempty"`
+ CompletedAt string `json:"completed_at,omitempty" validate:"omitempty"`
+ Source string `json:"source,omitempty" validate:"omitempty"`
}
// LunataskCreateTaskResponse represents the response from Lunatask API when creating a task
@@ -218,7 +262,7 @@ func handleCreateTask(
arguments := request.Params.Arguments
payload := LunataskCreateTaskRequest{
- Source: "lmcps",
+ AreaID: config.Areas[0].ID,
}
argBytes, err := json.Marshal(arguments)
if err != nil {