mcp-server-things 1.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mcp_server_things-1.1.1.dist-info/LICENSE +36 -0
- mcp_server_things-1.1.1.dist-info/METADATA +436 -0
- mcp_server_things-1.1.1.dist-info/RECORD +33 -0
- mcp_server_things-1.1.1.dist-info/WHEEL +5 -0
- mcp_server_things-1.1.1.dist-info/entry_points.txt +2 -0
- mcp_server_things-1.1.1.dist-info/top_level.txt +1 -0
- things_mcp/__init__.py +1 -0
- things_mcp/__main__.py +6 -0
- things_mcp/config.py +559 -0
- things_mcp/context_manager.py +770 -0
- things_mcp/hybrid_tools.py +1003 -0
- things_mcp/locale_aware_dates.py +501 -0
- things_mcp/main.py +329 -0
- things_mcp/models/__init__.py +62 -0
- things_mcp/models/response_models.py +38 -0
- things_mcp/models/things_models.py +409 -0
- things_mcp/move_operations.py +530 -0
- things_mcp/operation_queue.py +455 -0
- things_mcp/pure_applescript_scheduler.py +1242 -0
- things_mcp/reliable_scheduling.py +339 -0
- things_mcp/response_optimizer.py +376 -0
- things_mcp/server.py +1578 -0
- things_mcp/server_outdated.py +503 -0
- things_mcp/services/__init__.py +14 -0
- things_mcp/services/applescript_manager.py +1657 -0
- things_mcp/services/cache_manager.py +107 -0
- things_mcp/services/error_handler.py +418 -0
- things_mcp/services/tag_service.py +313 -0
- things_mcp/services/validation_service.py +338 -0
- things_mcp/shared_cache.py +334 -0
- things_mcp/tools.py +3282 -0
- things_mcp/utils/__init__.py +1 -0
- things_mcp/utils/applescript_utils.py +50 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Eric Bowman
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
ATTRIBUTION NOTICES:
|
|
26
|
+
|
|
27
|
+
This software is built using the FastMCP framework, which is licensed under
|
|
28
|
+
the Apache License 2.0. For full FastMCP license terms, see:
|
|
29
|
+
https://github.com/jlowin/fastmcp/blob/main/LICENSE
|
|
30
|
+
|
|
31
|
+
This software integrates with Things 3 by Cultured Code using official
|
|
32
|
+
AppleScript APIs. Things 3 is a trademark of Cultured Code GmbH & Co. KG.
|
|
33
|
+
This project is not affiliated with or endorsed by Cultured Code.
|
|
34
|
+
|
|
35
|
+
AppleScript is a technology by Apple Inc. This project uses AppleScript
|
|
36
|
+
in accordance with Apple's terms and conditions for automation.
|
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: mcp-server-things
|
|
3
|
+
Version: 1.1.1
|
|
4
|
+
Summary: Model Context Protocol server for Things 3 task management integration
|
|
5
|
+
Home-page: https://github.com/ebowman/mcp-server-things
|
|
6
|
+
Author: MCP Developer
|
|
7
|
+
Author-email: MCP Developer <developer@example.com>
|
|
8
|
+
License: MIT
|
|
9
|
+
Project-URL: Homepage, https://github.com/ebowman/mcp-server-things
|
|
10
|
+
Project-URL: Bug Reports, https://github.com/ebowman/mcp-server-things/issues
|
|
11
|
+
Project-URL: Source, https://github.com/ebowman/mcp-server-things
|
|
12
|
+
Keywords: mcp,things3,applescript,task-management,productivity
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: MacOS
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Office/Business :: Scheduling
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
24
|
+
Requires-Python: >=3.8
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: fastmcp>=2.0.0
|
|
28
|
+
Requires-Dist: pydantic>=2.0.0
|
|
29
|
+
Requires-Dist: pydantic-settings>=2.0.0
|
|
30
|
+
Requires-Dist: asyncio-mqtt>=0.11.0
|
|
31
|
+
Requires-Dist: things.py>=0.0.15
|
|
32
|
+
Provides-Extra: config
|
|
33
|
+
Requires-Dist: python-dotenv>=0.19.0; extra == "config"
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
38
|
+
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
|
|
39
|
+
Requires-Dist: pytest-benchmark>=4.0.0; extra == "dev"
|
|
40
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
41
|
+
Requires-Dist: isort>=5.0.0; extra == "dev"
|
|
42
|
+
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
43
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
44
|
+
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
|
|
45
|
+
Requires-Dist: python-dotenv>=0.19.0; extra == "dev"
|
|
46
|
+
Provides-Extra: docs
|
|
47
|
+
Requires-Dist: sphinx>=5.0.0; extra == "docs"
|
|
48
|
+
Requires-Dist: sphinx-rtd-theme>=1.0.0; extra == "docs"
|
|
49
|
+
Requires-Dist: myst-parser>=1.0.0; extra == "docs"
|
|
50
|
+
Provides-Extra: test
|
|
51
|
+
Requires-Dist: pytest>=7.0.0; extra == "test"
|
|
52
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
|
|
53
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "test"
|
|
54
|
+
Requires-Dist: pytest-mock>=3.10.0; extra == "test"
|
|
55
|
+
Requires-Dist: coverage>=7.0.0; extra == "test"
|
|
56
|
+
|
|
57
|
+
# Things 3 MCP Server
|
|
58
|
+
|
|
59
|
+
[](https://www.python.org/downloads/)
|
|
60
|
+
[](LICENSE)
|
|
61
|
+
[](https://www.apple.com/macos/)
|
|
62
|
+
|
|
63
|
+
A Model Context Protocol (MCP) server that connects Claude and other AI assistants to Things 3 for natural language task management.
|
|
64
|
+
|
|
65
|
+
## Installation
|
|
66
|
+
|
|
67
|
+
### From Source
|
|
68
|
+
|
|
69
|
+
1. Clone the repository:
|
|
70
|
+
```bash
|
|
71
|
+
git clone https://github.com/ebowman/mcp-server-things.git
|
|
72
|
+
cd mcp-server-things
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
2. Create and activate a virtual environment:
|
|
76
|
+
```bash
|
|
77
|
+
python3 -m venv venv
|
|
78
|
+
source venv/bin/activate # On macOS/Linux
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
3. Install dependencies:
|
|
82
|
+
```bash
|
|
83
|
+
pip install -r requirements.txt
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
4. Install in development mode:
|
|
87
|
+
```bash
|
|
88
|
+
pip install -e .
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Claude Desktop Configuration
|
|
92
|
+
|
|
93
|
+
Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json`):
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"mcpServers": {
|
|
98
|
+
"things": {
|
|
99
|
+
"command": "/path/to/mcp-server-things/venv/bin/python",
|
|
100
|
+
"args": ["-m", "things_mcp"],
|
|
101
|
+
"env": {
|
|
102
|
+
"PYTHONPATH": "/path/to/mcp-server-things/src",
|
|
103
|
+
"THINGS_MCP_LOG_LEVEL": "INFO",
|
|
104
|
+
"THINGS_MCP_APPLESCRIPT_TIMEOUT": "30"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Note:**
|
|
112
|
+
- Replace `/path/to/mcp-server-things` with your actual installation path
|
|
113
|
+
- Use the full path to the Python executable in your virtual environment
|
|
114
|
+
- See Configuration section below for environment variable options
|
|
115
|
+
|
|
116
|
+

|
|
117
|
+
*Creating tasks with natural language through Claude*
|
|
118
|
+
|
|
119
|
+
## 📚 Documentation
|
|
120
|
+
|
|
121
|
+
- **[User Examples](docs/USER_EXAMPLES.md)** - Rich examples of how to use Things 3 with AI assistants
|
|
122
|
+
- **[Architecture Overview](docs/ARCHITECTURE.md)** - Technical design and implementation details
|
|
123
|
+
- **[Troubleshooting](docs/TROUBLESHOOTING.md)** - Common issues and solutions
|
|
124
|
+
|
|
125
|
+
## Features
|
|
126
|
+
|
|
127
|
+
### Core Todo Operations
|
|
128
|
+
- **Create**: Add todos with full metadata (tags, deadlines, projects, notes, reminders)
|
|
129
|
+
- **Read**: Get todos by ID, project, or built-in lists (Today, Inbox, Upcoming, etc.)
|
|
130
|
+
- **Update**: Modify existing todos with partial updates
|
|
131
|
+
- **Delete**: Remove todos safely
|
|
132
|
+
- **Search**: Find todos by title, notes, or advanced filters
|
|
133
|
+
|
|
134
|
+
### Project & Area Management
|
|
135
|
+
- Get all projects and areas with optional task inclusion
|
|
136
|
+
- Create new projects with initial todos
|
|
137
|
+
- Update project metadata and status
|
|
138
|
+
- Organize todos within project hierarchies
|
|
139
|
+
|
|
140
|
+
### Built-in List Access
|
|
141
|
+
- **Inbox**: Capture new items
|
|
142
|
+
- **Today**: Items scheduled for today
|
|
143
|
+
- **Upcoming**: Future scheduled items
|
|
144
|
+
- **Anytime**: Items without specific dates
|
|
145
|
+
- **Someday**: Items for future consideration
|
|
146
|
+
- **Logbook**: Completed items history
|
|
147
|
+
- **Trash**: Deleted items
|
|
148
|
+
|
|
149
|
+
### Advanced Features
|
|
150
|
+
- **Reminder Support**: Create todos with specific reminder times (e.g., "today@14:30")
|
|
151
|
+
- Uses hybrid approach: AppleScript for regular todos, URL scheme for reminders
|
|
152
|
+
- This works around AppleScript API limitation (cannot set reminder times)
|
|
153
|
+
- **Tag Management**: Full tag support with AI creation control
|
|
154
|
+
- **Date-Range Queries**: Get todos due/activating within specific timeframes
|
|
155
|
+
- **URL Schemes**: Native Things 3 URL scheme integration
|
|
156
|
+
- **Health Monitoring**: System health checks and queue status monitoring
|
|
157
|
+
- **Error Handling**: Robust error handling with configurable retries
|
|
158
|
+
- **Logging**: Structured logging with configurable levels
|
|
159
|
+
- **Concurrency Support**: Multi-client safe operation with operation queuing
|
|
160
|
+
- **Input Validation**: Configurable limits for titles, notes, and tags
|
|
161
|
+
|
|
162
|
+
## Requirements
|
|
163
|
+
|
|
164
|
+
- **macOS**: This server requires macOS (tested on macOS 12+)
|
|
165
|
+
- **Things 3**: Things 3 must be installed and accessible
|
|
166
|
+
- **Python**: Python 3.8 or higher
|
|
167
|
+
- **Permissions**: AppleScript permissions for Things 3 access
|
|
168
|
+
|
|
169
|
+
## Quick Start
|
|
170
|
+
|
|
171
|
+
Once installed, Claude (or other MCP clients) can automatically discover and use all available tools. No additional setup required.
|
|
172
|
+
|
|
173
|
+
## Configuration
|
|
174
|
+
|
|
175
|
+
The server uses environment variables for configuration. You can set these variables in three ways:
|
|
176
|
+
1. System environment variables
|
|
177
|
+
2. A `.env` file (automatically loaded from the current directory)
|
|
178
|
+
3. A custom `.env` file specified with `--env-file`
|
|
179
|
+
|
|
180
|
+
### Using the .env File
|
|
181
|
+
|
|
182
|
+
1. **Review the example configuration:**
|
|
183
|
+
```bash
|
|
184
|
+
cat .env.example
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
2. **Create your own .env file:**
|
|
188
|
+
```bash
|
|
189
|
+
cp .env.example .env
|
|
190
|
+
# Edit .env to customize settings
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
3. **Or use a custom location:**
|
|
194
|
+
```bash
|
|
195
|
+
cp .env.example ~/my-things-config.env
|
|
196
|
+
python -m things_mcp --env-file ~/my-things-config.env
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Key Configuration Options
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Server identification
|
|
203
|
+
THINGS_MCP_SERVER_NAME=things3-mcp-server
|
|
204
|
+
THINGS_MCP_SERVER_VERSION=1.0.0
|
|
205
|
+
|
|
206
|
+
# AppleScript execution
|
|
207
|
+
THINGS_MCP_APPLESCRIPT_TIMEOUT=30.0 # Timeout in seconds (1-300)
|
|
208
|
+
THINGS_MCP_APPLESCRIPT_RETRY_COUNT=3 # Retry attempts (0-10)
|
|
209
|
+
|
|
210
|
+
# Tag management - Control AI tag creation
|
|
211
|
+
THINGS_MCP_AI_CAN_CREATE_TAGS=false # false = AI can only use existing tags
|
|
212
|
+
THINGS_MCP_TAG_VALIDATION_CASE_SENSITIVE=false
|
|
213
|
+
|
|
214
|
+
# Logging
|
|
215
|
+
THINGS_MCP_LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR, CRITICAL
|
|
216
|
+
THINGS_MCP_LOG_FILE_PATH=/path/to/file.log # Optional: log to file instead of console
|
|
217
|
+
|
|
218
|
+
# Validation limits
|
|
219
|
+
THINGS_MCP_MAX_TITLE_LENGTH=500
|
|
220
|
+
THINGS_MCP_MAX_NOTES_LENGTH=10000
|
|
221
|
+
THINGS_MCP_MAX_TAGS_PER_ITEM=20
|
|
222
|
+
THINGS_MCP_SEARCH_RESULTS_LIMIT=100
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Command Line Options
|
|
226
|
+
|
|
227
|
+
The server supports several command-line options:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# Start with debug logging
|
|
231
|
+
python -m things_mcp --debug
|
|
232
|
+
|
|
233
|
+
# Use a custom .env file
|
|
234
|
+
python -m things_mcp --env-file ~/my-config.env
|
|
235
|
+
|
|
236
|
+
# Check system health
|
|
237
|
+
python -m things_mcp --health-check
|
|
238
|
+
|
|
239
|
+
# Test AppleScript connectivity
|
|
240
|
+
python -m things_mcp --test-applescript
|
|
241
|
+
|
|
242
|
+
# Show version
|
|
243
|
+
python -m things_mcp --version
|
|
244
|
+
|
|
245
|
+
# Customize timeout and retry settings
|
|
246
|
+
python -m things_mcp --timeout 60 --retry-count 5
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Claude Desktop Environment Variables
|
|
250
|
+
|
|
251
|
+
You can set environment variables directly in your Claude Desktop configuration:
|
|
252
|
+
|
|
253
|
+
```json
|
|
254
|
+
{
|
|
255
|
+
"mcpServers": {
|
|
256
|
+
"things": {
|
|
257
|
+
"env": {
|
|
258
|
+
"THINGS_MCP_LOG_LEVEL": "DEBUG",
|
|
259
|
+
"THINGS_MCP_AI_CAN_CREATE_TAGS": "true",
|
|
260
|
+
"THINGS_MCP_APPLESCRIPT_TIMEOUT": "60"
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## Available MCP Tools
|
|
268
|
+
|
|
269
|
+
### Todo Management
|
|
270
|
+
- `get_todos(project_uuid?, include_items?)` - List todos
|
|
271
|
+
- `add_todo(title, ...)` - Create new todo with optional reminder time
|
|
272
|
+
- `update_todo(id, ...)` - Update existing todo
|
|
273
|
+
- `get_todo_by_id(todo_id)` - Get specific todo
|
|
274
|
+
- `delete_todo(todo_id)` - Delete todo
|
|
275
|
+
|
|
276
|
+
### Project Management
|
|
277
|
+
- `get_projects(include_items?)` - List projects
|
|
278
|
+
- `add_project(title, ...)` - Create new project
|
|
279
|
+
- `update_project(id, ...)` - Update existing project
|
|
280
|
+
|
|
281
|
+
### Area Management
|
|
282
|
+
- `get_areas(include_items?)` - List areas
|
|
283
|
+
|
|
284
|
+
### List Access
|
|
285
|
+
- `get_inbox()` - Get Inbox todos
|
|
286
|
+
- `get_today()` - Get Today's todos
|
|
287
|
+
- `get_upcoming()` - Get upcoming todos
|
|
288
|
+
- `get_anytime()` - Get Anytime todos
|
|
289
|
+
- `get_someday()` - Get Someday todos
|
|
290
|
+
- `get_logbook(limit?, period?)` - Get completed todos
|
|
291
|
+
- `get_trash()` - Get trashed todos
|
|
292
|
+
|
|
293
|
+
### Date-Range Queries
|
|
294
|
+
- `get_due_in_days(days)` - Get todos due within specified days
|
|
295
|
+
- `get_activating_in_days(days)` - Get todos activating within days
|
|
296
|
+
- `get_upcoming_in_days(days)` - Get todos due or activating within days
|
|
297
|
+
|
|
298
|
+
### Search & Tags
|
|
299
|
+
- `search_todos(query)` - Basic search
|
|
300
|
+
- `search_advanced(...)` - Advanced search with filters
|
|
301
|
+
- `get_tags(include_items?)` - List tags
|
|
302
|
+
- `create_tag(name)` - Create a new tag
|
|
303
|
+
- `get_tagged_items(tag)` - Get items with specific tag
|
|
304
|
+
- `add_tags(todo_id, tags)` - Add tags to a todo
|
|
305
|
+
- `remove_tags(todo_id, tags)` - Remove tags from a todo
|
|
306
|
+
- `get_recent(period)` - Get recently created items
|
|
307
|
+
|
|
308
|
+
### Bulk Operations
|
|
309
|
+
- `move_record(record_id, to_parent_uuid)` - Move single record
|
|
310
|
+
- `bulk_move_records(record_ids, to_parent_uuid)` - Move multiple records
|
|
311
|
+
|
|
312
|
+
### System & Utilities
|
|
313
|
+
- `health_check()` - Check server and Things 3 status
|
|
314
|
+
- `queue_status()` - Check operation queue status and statistics
|
|
315
|
+
- `get_server_capabilities()` - Get server features and configuration
|
|
316
|
+
- `get_usage_recommendations()` - Get usage tips and best practices
|
|
317
|
+
- `context_stats()` - Get context-aware response statistics
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
## Troubleshooting
|
|
321
|
+
|
|
322
|
+
### Common Issues
|
|
323
|
+
|
|
324
|
+
#### Permission Denied Errors
|
|
325
|
+
```bash
|
|
326
|
+
# Grant AppleScript permissions to your terminal/IDE
|
|
327
|
+
# System Preferences > Security & Privacy > Privacy > Automation
|
|
328
|
+
# Enable access for your terminal application to control Things 3
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
#### Things 3 Not Found
|
|
332
|
+
```bash
|
|
333
|
+
# Verify Things 3 is installed and running
|
|
334
|
+
python -m things_mcp.main --health-check
|
|
335
|
+
|
|
336
|
+
# Check if Things 3 is in Applications folder
|
|
337
|
+
ls /Applications/ | grep -i things
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
#### Connection Timeouts
|
|
341
|
+
```bash
|
|
342
|
+
# Increase timeout value via environment variable
|
|
343
|
+
export THINGS_MCP_APPLESCRIPT_TIMEOUT=60
|
|
344
|
+
|
|
345
|
+
# Or in your .env file
|
|
346
|
+
THINGS_MCP_APPLESCRIPT_TIMEOUT=60
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Debug Mode
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
# Enable debug logging
|
|
353
|
+
python -m things_mcp.main --debug
|
|
354
|
+
|
|
355
|
+
# Check logs
|
|
356
|
+
tail -f things_mcp.log
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Health Diagnostics
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
# Comprehensive health check
|
|
363
|
+
python -m things_mcp.main --health-check
|
|
364
|
+
|
|
365
|
+
# Test specific components
|
|
366
|
+
python -m things_mcp.main --test-applescript
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Performance
|
|
370
|
+
|
|
371
|
+
- **Startup Time**: Less than 2 seconds
|
|
372
|
+
- **Response Time**: Less than 500ms for most operations
|
|
373
|
+
- **Memory Usage**: 15MB baseline, 50MB under concurrent load
|
|
374
|
+
- **Concurrent Requests**: Serialized write operations to prevent conflicts
|
|
375
|
+
- **Throughput**: Multiple operations per second depending on complexity
|
|
376
|
+
- **Queue Processing**: Less than 50ms latency for operation enqueuing
|
|
377
|
+
|
|
378
|
+
## Security
|
|
379
|
+
|
|
380
|
+
- No network access required (local AppleScript only)
|
|
381
|
+
- No data stored outside of Things 3
|
|
382
|
+
- Minimal system permissions needed
|
|
383
|
+
- Secure AppleScript execution with timeouts
|
|
384
|
+
- Input validation on all parameters
|
|
385
|
+
|
|
386
|
+
## Contributing
|
|
387
|
+
|
|
388
|
+
Contributions are welcome! Please follow these guidelines:
|
|
389
|
+
|
|
390
|
+
- Set up a virtual environment and install dependencies
|
|
391
|
+
- Follow existing code style and patterns
|
|
392
|
+
- Add tests for new features
|
|
393
|
+
- Submit pull requests with clear descriptions
|
|
394
|
+
|
|
395
|
+
## Documentation
|
|
396
|
+
|
|
397
|
+
- [Troubleshooting Guide](docs/TROUBLESHOOTING.md) - Common issues and solutions
|
|
398
|
+
- [Development Roadmap](docs/ROADMAP.md) - Implementation status and missing features
|
|
399
|
+
|
|
400
|
+
## License
|
|
401
|
+
|
|
402
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
403
|
+
|
|
404
|
+
## Support
|
|
405
|
+
|
|
406
|
+
- **Issues**: [GitHub Issues](https://github.com/ebowman/mcp-server-things/issues)
|
|
407
|
+
- **Discussions**: [GitHub Discussions](https://github.com/ebowman/mcp-server-things/discussions)
|
|
408
|
+
- **Email**: ebowman@boboco.ie
|
|
409
|
+
|
|
410
|
+
## Roadmap
|
|
411
|
+
|
|
412
|
+
### Phase 1: Core Stability (Current)
|
|
413
|
+
- Complete MCP tool implementation (Completed)
|
|
414
|
+
- Robust error handling and logging (Completed)
|
|
415
|
+
- Comprehensive testing suite (Completed)
|
|
416
|
+
- Documentation and examples (Completed)
|
|
417
|
+
|
|
418
|
+
### Phase 2: Enhanced Features
|
|
419
|
+
- Multi-client concurrency support with operation queuing (Completed)
|
|
420
|
+
- Configurable tag creation policies (Completed)
|
|
421
|
+
- Reminder support with datetime scheduling (Completed)
|
|
422
|
+
- Date-range query tools (Completed)
|
|
423
|
+
- Bulk move operations (Completed)
|
|
424
|
+
- Real-time sync with Things 3 changes (Planned)
|
|
425
|
+
- Advanced natural language processing (Planned)
|
|
426
|
+
- Integration with calendar and email (Planned)
|
|
427
|
+
|
|
428
|
+
### Phase 3: Advanced Integration
|
|
429
|
+
- Multi-user support (Planned)
|
|
430
|
+
- API rate limiting (Planned)
|
|
431
|
+
- Webhook support (Planned)
|
|
432
|
+
- Analytics and reporting (Planned)
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
Built for the Things 3 and MCP community.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
things_mcp/__init__.py,sha256=gHhZDr_TTQaXVYfMeJAbYOMemblJ57ncWvIG3ZYvWHE,21
|
|
2
|
+
things_mcp/__main__.py,sha256=TogYe_r8IPGhC6FbO32m3iAIxshf6i0v779US0d3rRE,127
|
|
3
|
+
things_mcp/config.py,sha256=tOnmVptrfM6_wvY33cFl4QOwy8yIlahfDw1bUi51T6o,17830
|
|
4
|
+
things_mcp/context_manager.py,sha256=4eL3MnEgLoZM6c5ckVFe103sFyxnPa0jt8EOds7naWw,34629
|
|
5
|
+
things_mcp/hybrid_tools.py,sha256=Fh9Et27RQkRAmWqDfbA_IBevopX6XUohlvKNnDIzWMs,44110
|
|
6
|
+
things_mcp/locale_aware_dates.py,sha256=X5wvupUOferQNkb0ckYjNt9rXt2ODCBv9Wdfv696QX4,19913
|
|
7
|
+
things_mcp/main.py,sha256=19LsfoeNEejtcAcIVCEO_8JU7_78UetaqolxPQL3C74,10818
|
|
8
|
+
things_mcp/move_operations.py,sha256=jf2OA6X9nnvGujhRyK8XLlRX5huGR7DckbTsyuR8QrI,20460
|
|
9
|
+
things_mcp/operation_queue.py,sha256=VG_dmWM7l4gI6XJO1z5j8WzaI58eKL6DrMjzsE6cj1I,16531
|
|
10
|
+
things_mcp/pure_applescript_scheduler.py,sha256=b3LIsFpMPkw8BNbu9NUKNwhMoYoEQQHWtfygGcND5_g,53912
|
|
11
|
+
things_mcp/reliable_scheduling.py,sha256=K1xEvA5is9SazVDpbOH4e-0g4--zxQcWfp2RQkCcEe4,13835
|
|
12
|
+
things_mcp/response_optimizer.py,sha256=xuUpH4VdcCQ9kFn9luY4WkHPG3LYY5I9GgtmS5HXng8,13285
|
|
13
|
+
things_mcp/server.py,sha256=9FrejHua0eKkI1jPp4xa0ZJ0b3--AbxMlqnRArIWkwk,77689
|
|
14
|
+
things_mcp/server_outdated.py,sha256=IM5eUftfHl8XJyFpZUJMtthKs8_t_0UqkzZJ_cJXcg8,17614
|
|
15
|
+
things_mcp/shared_cache.py,sha256=WONXiZt-eX74D0489fyZ4qlW36xSLm_vAXKuY3Ar4ws,11451
|
|
16
|
+
things_mcp/tools.py,sha256=oIGwIq2JEhXlEAGTONUbT8GZUAUfyscOVNhgTE3Agag,156861
|
|
17
|
+
things_mcp/models/__init__.py,sha256=pxdsNP9RD1DXZEo64QOlfujR1_3mkxucJI6DbdzYoIs,1290
|
|
18
|
+
things_mcp/models/response_models.py,sha256=Kj2yB1PeFHfQQDLXkokbDRIO73DS9ApBaK8cmDwCVJg,924
|
|
19
|
+
things_mcp/models/things_models.py,sha256=YpuUWYI4FVR7qXmPRj0_ozdTg-2InqLnn2xMCTZl3H4,15271
|
|
20
|
+
things_mcp/services/__init__.py,sha256=ljQg-mkXZxdWvFNqNZ8aoP3lRMV9YqEJPWap5-5Rubc,398
|
|
21
|
+
things_mcp/services/applescript_manager.py,sha256=MJbjK7dVoWthFEfOzhTOXZuwX0qu7sGwckcgO3sSEA4,77688
|
|
22
|
+
things_mcp/services/cache_manager.py,sha256=E_dI5ozQudWkIrVvd61_9W2weJiXS8_NHWiBroBR1Hg,2989
|
|
23
|
+
things_mcp/services/error_handler.py,sha256=1VaCTXTnn62wHNJoTVpQHkXwJr2DnYZH0zoUSKKtPb8,15126
|
|
24
|
+
things_mcp/services/tag_service.py,sha256=4IYFOdS5596WrNwVLlN70wb_Aun-mYE9WIzmF2T60ks,12098
|
|
25
|
+
things_mcp/services/validation_service.py,sha256=FCez8Krdl2Zb7vIZ2VvYaxbG-XaImx_ZEc-qmB0pZMU,11763
|
|
26
|
+
things_mcp/utils/__init__.py,sha256=oUfNgFd9Kqfm98UO7ysYmceiVlNOJ7WFZ1i-6qmBKs4,37
|
|
27
|
+
things_mcp/utils/applescript_utils.py,sha256=K4Xm1HQ_5goMaBrnYDENkUg5_IfkExPSQH3btjt4Hck,1423
|
|
28
|
+
mcp_server_things-1.1.1.dist-info/LICENSE,sha256=3bOmaeO4SzDvfbdo_yZxJS-vi_WLTKYg7NFV5TYHCSw,1633
|
|
29
|
+
mcp_server_things-1.1.1.dist-info/METADATA,sha256=h7aJy3a4mfQfT9TKt2DE_L0cgwrPvWHNcgCEd81BZ0M,13961
|
|
30
|
+
mcp_server_things-1.1.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
31
|
+
mcp_server_things-1.1.1.dist-info/entry_points.txt,sha256=_gDhDOgLpmn99VtCU7IAPTpejKYe5nTDqrcNZxMaWYc,60
|
|
32
|
+
mcp_server_things-1.1.1.dist-info/top_level.txt,sha256=5jxKoULVumsxtvdUJL_Jr3BxHffP0FtbLHqmrgReH0M,11
|
|
33
|
+
mcp_server_things-1.1.1.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
things_mcp
|
things_mcp/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Things 3 MCP Server
|