Module: ThingsMcp::UrlScheme

Extended by:
UrlScheme
Included in:
UrlScheme
Defined in:
lib/things_mcp/url_scheme.rb

Overview

Things 3 URL scheme integration

This module provides methods for creating and updating todos and projects using Things 3’s URL scheme. It handles authentication tokens for update operations and manages the Things 3 application lifecycle.

Constant Summary collapse

THINGS_URL_BASE =
"things:///"

Instance Method Summary collapse

Instance Method Details

#add_project(params) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/things_mcp/url_scheme.rb', line 35

def add_project(params)
  url_params = {
    "title" => params["title"],
    "type" => "project",
  }

  # Optional parameters
  url_params["notes"] = params["notes"] if params["notes"]
  url_params["when"] = params["when"] if params["when"]
  url_params["deadline"] = params["deadline"] if params["deadline"]
  url_params["tags"] = params["tags"].join(",") if params["tags"]
  url_params["area-id"] = params["area_id"] if params["area_id"]
  url_params["area"] = params["area_title"] if params["area_title"]
  url_params["to-dos"] = params["todos"].join("\n") if params["todos"]

  execute_url("#{THINGS_URL_BASE}add-project", url_params)
end

#add_todo(params) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/things_mcp/url_scheme.rb', line 17

def add_todo(params)
  url_params = {
    "title" => params["title"],
  }

  # Optional parameters
  url_params["notes"] = params["notes"] if params["notes"]
  url_params["when"] = params["when"] if params["when"]
  url_params["deadline"] = params["deadline"] if params["deadline"]
  url_params["tags"] = params["tags"].join(",") if params["tags"]
  url_params["checklist-items"] = params["checklist_items"].join("\n") if params["checklist_items"]
  url_params["list-id"] = params["list_id"] if params["list_id"]
  url_params["list"] = params["list_title"] if params["list_title"]
  url_params["heading"] = params["heading"] if params["heading"]

  execute_url("#{THINGS_URL_BASE}add", url_params)
end

#search_items(query) ⇒ Object



89
90
91
# File 'lib/things_mcp/url_scheme.rb', line 89

def search_items(query)
  execute_url("#{THINGS_URL_BASE}search", { "query" => query })
end

#show_item(params) ⇒ Object



93
94
95
96
97
98
99
100
101
102
# File 'lib/things_mcp/url_scheme.rb', line 93

def show_item(params)
  url_params = {
    "id" => params["id"],
  }

  url_params["query"] = params["query"] if params["query"]
  url_params["filter"] = params["filter_tags"].join(",") if params["filter_tags"]

  execute_url("#{THINGS_URL_BASE}show", url_params)
end

#update_project(params) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/things_mcp/url_scheme.rb', line 71

def update_project(params)
  url_params = {
    "id" => params["id"],
    "type" => "project",
  }

  # Optional update parameters
  url_params["title"] = params["title"] if params["title"]
  url_params["notes"] = params["notes"] if params["notes"]
  url_params["when"] = params["when"] if params["when"]
  url_params["deadline"] = params["deadline"] if params["deadline"]
  url_params["tags"] = params["tags"].join(",") if params["tags"]
  url_params["completed"] = "true" if params["completed"]
  url_params["canceled"] = "true" if params["canceled"]

  execute_url("#{THINGS_URL_BASE}update-project", url_params)
end

#update_todo(params) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/things_mcp/url_scheme.rb', line 53

def update_todo(params)
  url_params = {
    "id" => params["id"],
  }

  # Optional update parameters
  url_params["title"] = params["title"] if params["title"]
  url_params["notes"] = params["notes"] if params["notes"]
  url_params["when"] = params["when"] if params["when"]
  url_params["deadline"] = params["deadline"] if params["deadline"]
  # Use add-tags to append tags (might work better for new tags)
  url_params["add-tags"] = params["tags"].join(",") if params["tags"]
  url_params["completed"] = "true" if params["completed"]
  url_params["canceled"] = "true" if params["canceled"]

  execute_url("#{THINGS_URL_BASE}update", url_params)
end