@ezmodo/mcp-server 0.13.0

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.
Files changed (98) hide show
  1. package/README.md +305 -0
  2. package/config/development.js +20 -0
  3. package/config/endpoint-map.js +351 -0
  4. package/config/index.js +34 -0
  5. package/config/production.js +18 -0
  6. package/config/staging.js +18 -0
  7. package/handlers/access.js +141 -0
  8. package/handlers/activity.js +112 -0
  9. package/handlers/agents.js +95 -0
  10. package/handlers/ai-intelligence.js +55 -0
  11. package/handlers/attachments.js +30 -0
  12. package/handlers/catalogs.js +169 -0
  13. package/handlers/components.js +282 -0
  14. package/handlers/context-manifest.js +1150 -0
  15. package/handlers/decisions.js +114 -0
  16. package/handlers/designs.js +118 -0
  17. package/handlers/documents.js +227 -0
  18. package/handlers/entities.js +95 -0
  19. package/handlers/epics.js +190 -0
  20. package/handlers/facts.js +62 -0
  21. package/handlers/feature-flags.js +142 -0
  22. package/handlers/features.js +137 -0
  23. package/handlers/folders.js +127 -0
  24. package/handlers/git-context.js +917 -0
  25. package/handlers/github.js +72 -0
  26. package/handlers/graph.js +23 -0
  27. package/handlers/index.js +205 -0
  28. package/handlers/links.js +156 -0
  29. package/handlers/milestones.js +131 -0
  30. package/handlers/organizations.js +14 -0
  31. package/handlers/projects.js +122 -0
  32. package/handlers/recurring-tasks.js +33 -0
  33. package/handlers/tags.js +124 -0
  34. package/handlers/tasks.js +561 -0
  35. package/handlers/testing.js +116 -0
  36. package/handlers/todos.js +43 -0
  37. package/handlers/watchers.js +54 -0
  38. package/handlers/work-templates.js +32 -0
  39. package/index.js +175 -0
  40. package/lib/active-session.js +86 -0
  41. package/lib/auto-assign.js +93 -0
  42. package/lib/autolink.js +176 -0
  43. package/lib/changed-files.js +22 -0
  44. package/lib/env.js +45 -0
  45. package/lib/git-helpers.js +553 -0
  46. package/lib/git-utils.js +73 -0
  47. package/lib/http-client.js +164 -0
  48. package/lib/links-at-create.js +94 -0
  49. package/lib/local-cache.js +140 -0
  50. package/lib/logger.js +109 -0
  51. package/lib/manifest-loader.js +182 -0
  52. package/lib/manifest-query.js +686 -0
  53. package/lib/repo-config-dir.js +118 -0
  54. package/lib/version.js +10 -0
  55. package/lib/web-url.js +69 -0
  56. package/lib/worktree-tools.js +950 -0
  57. package/package.json +62 -0
  58. package/prompts/ai-workflow-automation.js +96 -0
  59. package/prompts/index.js +39 -0
  60. package/prompts/zephly-usage-guide-content.txt +631 -0
  61. package/prompts/zephly-usage-guide.js +119 -0
  62. package/tools/access-entity-types.js +28 -0
  63. package/tools/access.js +152 -0
  64. package/tools/activity.js +38 -0
  65. package/tools/agents.js +208 -0
  66. package/tools/ai-intelligence.js +111 -0
  67. package/tools/attachments.js +92 -0
  68. package/tools/catalogs.js +341 -0
  69. package/tools/components.js +249 -0
  70. package/tools/context-manifest.js +236 -0
  71. package/tools/decisions.js +168 -0
  72. package/tools/designs.js +222 -0
  73. package/tools/documents.js +287 -0
  74. package/tools/entities.js +223 -0
  75. package/tools/epics.js +267 -0
  76. package/tools/facts.js +70 -0
  77. package/tools/feature-flags.js +300 -0
  78. package/tools/features.js +246 -0
  79. package/tools/folders.js +122 -0
  80. package/tools/git-context.js +109 -0
  81. package/tools/github.js +172 -0
  82. package/tools/graph.js +70 -0
  83. package/tools/index.js +77 -0
  84. package/tools/link-params.js +93 -0
  85. package/tools/linkable-types.js +36 -0
  86. package/tools/links.js +199 -0
  87. package/tools/milestones.js +176 -0
  88. package/tools/organizations.js +23 -0
  89. package/tools/projects.js +172 -0
  90. package/tools/recurring-tasks.js +115 -0
  91. package/tools/tags.js +219 -0
  92. package/tools/task-item-schema.js +57 -0
  93. package/tools/task-type.js +33 -0
  94. package/tools/tasks.js +680 -0
  95. package/tools/testing.js +344 -0
  96. package/tools/todos.js +69 -0
  97. package/tools/watchers.js +81 -0
  98. package/tools/work-templates.js +96 -0
package/README.md ADDED
@@ -0,0 +1,305 @@
1
+ # EzModo MCP Server
2
+
3
+ Model Context Protocol (MCP) server for ezmodo - AI-first project management.
4
+
5
+ ## Installation
6
+
7
+ ### Global Installation (Recommended)
8
+
9
+ ```bash
10
+ npm install -g @ezmodo/mcp-server
11
+ ```
12
+
13
+ ### Local Installation
14
+
15
+ For local development, use the ezmodo CLI (recommended):
16
+
17
+ ```bash
18
+ # Install CLI
19
+ curl -fsSL https://ezmodo.com/cli/install/scripts/latest/install.sh | sh
20
+
21
+ # Authenticate
22
+ ezmodo auth login
23
+
24
+ # Configure MCP
25
+ ezmodo mcp install
26
+ ```
27
+
28
+ ## Prerequisites
29
+
30
+ 1. **ezmodo Account**: Sign up at [ezmodo.com](https://ezmodo.com)
31
+ 2. **API Key**: Generate an API key in your ezmodo account settings
32
+
33
+ ### Generating an API Key
34
+
35
+ 1. Log in to [ezmodo.com](https://ezmodo.com)
36
+ 2. Navigate to **Settings** → **API Keys**
37
+ 3. Click **Generate New API Key**
38
+ 4. Copy your API key
39
+ 5. Store it securely - you won't be able to see it again!
40
+
41
+ ## Configuration
42
+
43
+ ### For Claude Desktop
44
+
45
+ Add to your `claude_desktop_config.json`:
46
+
47
+ ```json
48
+ {
49
+ "mcpServers": {
50
+ "ezmodo": {
51
+ "command": "ezmodo-mcp-server",
52
+ "env": {
53
+ "EZMODO_API_KEY": "your_api_key_here",
54
+ "EZMODO_API_URL": "https://ezmodo.com/api"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ ```
60
+
61
+ **Configuration Options:**
62
+
63
+ - `EZMODO_API_KEY` (required): Your ezmodo API key. Legacy `ZEPHLY_API_KEY` is still read as a fallback during the rebrand transition.
64
+ - `EZMODO_API_URL` (optional): Custom API URL. Defaults to production (`https://ezmodo.com/api`).
65
+
66
+ ### For Local Development
67
+
68
+ If running from source:
69
+
70
+ ```bash
71
+ export EZMODO_API_KEY="your_api_key_here"
72
+ export EZMODO_API_URL="http://localhost:8787/api" # Local Go API
73
+ npm run dev
74
+ ```
75
+
76
+ ## Available Tools
77
+
78
+ The MCP server provides these tools for AI agents:
79
+
80
+ ### 1. `create_task`
81
+ Create a new task in a project with AI context.
82
+
83
+ **Parameters:**
84
+ - `projectId` (required): Project ID
85
+ - `title` (required): Task title
86
+ - `description` (required): Task description (markdown supported)
87
+ - `priority` (optional): `low`, `medium`, `high`, `urgent` (default: `medium`)
88
+ - `assigneeType` (optional): `human` or `ai` (default: `ai`)
89
+ - `assigneeId` (optional): Assignee identifier (default: `claude`)
90
+ - `assigneeName` (optional): Assignee name (default: `Claude`)
91
+ - `knowledge` (optional): Array of structured KnowledgeItem objects with `type`, `content`, and optional `tags`
92
+
93
+ ### 2. `update_task`
94
+ Update an existing task.
95
+
96
+ **Parameters:**
97
+ - `taskId` (required): Task ID
98
+ - `status` (optional): Task status
99
+ - `priority` (optional): Task priority
100
+ - `description` (optional): Updated description
101
+ - `addKnowledge` (optional): Array of structured KnowledgeItem objects to add
102
+
103
+ ### 3. `complete_task`
104
+ Mark a task as completed.
105
+
106
+ **Parameters:**
107
+ - `taskId` (required): Task ID
108
+ - `completionNotes` (optional): Completion notes
109
+
110
+ ### 4. `get_project_context`
111
+ Retrieve project context, configuration, and metadata.
112
+
113
+ **Parameters:**
114
+ - `projectId` (required): Project ID
115
+
116
+ ### 5. `add_task_context`
117
+ Add knowledge or memory to a task for AI continuity.
118
+
119
+ **Parameters:**
120
+ - `taskId` (required): Task ID
121
+ - `knowledge` (optional): Knowledge snippets to add
122
+ - `memory` (optional): Memory data to store
123
+
124
+ ### 6. `search_tasks`
125
+ Search for tasks with filters.
126
+
127
+ **Parameters:**
128
+ - `projectId` (optional): Filter by project
129
+ - `status` (optional): Filter by status
130
+ - `assignedToAI` (optional): Filter for AI-assigned tasks
131
+ - `searchText` (optional): Text search in title/description
132
+ - `limit` (optional): Max results (default: 50)
133
+
134
+ ### 7. `get_documentation`
135
+ Retrieve project documentation.
136
+
137
+ **Parameters:**
138
+ - `projectId` (required): Project ID
139
+ - `docType` (optional): Filter by type (`guide`, `api`, `process`, `context`)
140
+ - `tags` (optional): Filter by tags
141
+
142
+ ### 8. `manage_watch`
143
+ Watch or unwatch a task, subscribing **you** (the API key's owner) to
144
+ notifications about its status changes and comments.
145
+
146
+ You are subscribed automatically to tasks you're assigned, own, create or
147
+ comment on, so this is for following work that isn't yours.
148
+
149
+ **Parameters:**
150
+ - `action` (required): `watch` or `unwatch`
151
+ - `taskId` (required): The task to (un)watch
152
+
153
+ Both actions are idempotent. There is deliberately no `userId` parameter — the
154
+ acting user is always the key's owner, so an agent cannot subscribe someone else.
155
+
156
+ ### 9. `list_watched`
157
+ List the tasks you're watching, with status, priority, project and when each
158
+ last changed — enough to answer "what's happening on the work I follow?" without
159
+ a `get_task` per row. Each result carries `reason` (`manual`, `assignee`,
160
+ `owner` or `commenter`), why you're subscribed.
161
+
162
+ **Parameters:**
163
+ - `organizationId` (required): Organization to list for
164
+ - `limit` (optional): Max results (default: 200)
165
+
166
+ ### 10. `list_notifications`
167
+ Your in-app notifications — mentions, replies, assignments, and activity on
168
+ watched tasks.
169
+
170
+ **Parameters:**
171
+ - `unreadOnly` (optional): Only unread (default: `true`)
172
+ - `limit` (optional): Max results (default: 20, max: 100)
173
+
174
+ ## Usage Example
175
+
176
+ Once configured in Claude Desktop, you can use natural language:
177
+
178
+ ```
179
+ "Create a task in project abc123 titled 'Implement user authentication'
180
+ with high priority and assign it to me"
181
+
182
+ "Show me all in-progress tasks in my current project"
183
+
184
+ "Mark task xyz789 as completed with notes about the implementation"
185
+
186
+ "Watch task xyz789 for me"
187
+
188
+ "What's changed on the tasks I'm watching?"
189
+ ```
190
+
191
+ ## AI Agent Guidelines
192
+
193
+ ### Providing URLs to Users
194
+
195
+ When providing ezmodo URLs to users, **always use the actual orgSlug value** from the project context, never use placeholders.
196
+
197
+ **❌ Wrong:**
198
+ ```
199
+ View in ezmodo: https://ezmodo.com/{orgSlug}/projects/zephly/epics
200
+ ```
201
+
202
+ **✅ Correct:**
203
+ ```
204
+ View in ezmodo: https://ezmodo.com/emo/projects/zephly/epics
205
+ ```
206
+
207
+ **How to get the orgSlug:**
208
+ 1. Call `get_current_project_context()` or `list_projects()` to get project data
209
+ 2. Extract the `orgSlug` field from the response
210
+ 3. Use that actual value in any URLs you provide to users
211
+
212
+ **Example:**
213
+ ```javascript
214
+ // Response from get_current_project_context():
215
+ {
216
+ "projectId": "axFzraDA4yCLgVyVBFoG",
217
+ "projectName": "zephly",
218
+ "orgSlug": "emo", // <-- Use this actual value!
219
+ "organizationId": "VByHaD78P7B8ky7X4NZf"
220
+ }
221
+
222
+ // Then provide URL like:
223
+ "View your epic at: https://ezmodo.com/emo/projects/zephly/epics"
224
+ ```
225
+
226
+ This ensures users can click the link and go directly to the correct resource.
227
+
228
+ ### Project-First Hierarchy
229
+
230
+ ezmodo uses a project-first hierarchy: **Organization → Projects → Epics → Tasks**
231
+
232
+ - **Project**: Primary work container - blue theme
233
+ - **Epic**: Project-scoped milestone - orange theme
234
+ - **Task**: Individual work item within a project
235
+ - **Goal**: Organization-wide strategic objective (optional, links to epics)
236
+
237
+ When working with the MCP tools:
238
+ - Use `create_epic`, `get_epic`, `update_epic` for project milestones
239
+ - Use `create_task`, `get_task`, `update_task` for work items
240
+ - Tasks belong to projects (required) and optionally to epics
241
+
242
+ ## Security
243
+
244
+ - **API Keys**: Your API key authenticates with the ezmodo Go API
245
+ - **Revocable**: You can revoke API keys anytime in your ezmodo settings
246
+ - **Rate Limiting**: API keys have rate limits to prevent abuse
247
+ - **Audit Trail**: All API usage is logged in your ezmodo account
248
+
249
+ ## Troubleshooting
250
+
251
+ ### "Missing Authorization header"
252
+ - Ensure `EZMODO_API_KEY` is set in your configuration
253
+
254
+ ### "Invalid or revoked API key"
255
+ - Regenerate your API key in ezmodo settings
256
+ - Ensure the key hasn't expired or been revoked
257
+
258
+ ### "Failed to connect to API"
259
+ - Check your `EZMODO_API_URL` configuration
260
+ - Verify your internet connection
261
+
262
+ ### Claude Desktop doesn't see the server
263
+ - Restart Claude Desktop after updating config
264
+ - Check the config file path is correct
265
+ - Verify JSON syntax in `claude_desktop_config.json`
266
+
267
+ ## Development
268
+
269
+ ### Building from Source
270
+
271
+ For contributors with repository access:
272
+
273
+ ```bash
274
+ cd mcp-server
275
+ npm install
276
+ npm run dev
277
+ ```
278
+
279
+ ### Testing Locally
280
+
281
+ 1. Start the Go API locally:
282
+ ```bash
283
+ cd ../api && go run cmd/api/main.go
284
+ ```
285
+
286
+ 2. Set local API URL:
287
+ ```bash
288
+ export EZMODO_API_URL="http://localhost:8787/api"
289
+ export EZMODO_API_KEY="your_api_key"
290
+ ```
291
+
292
+ 3. Run MCP server:
293
+ ```bash
294
+ npm run dev
295
+ ```
296
+
297
+ ## Support
298
+
299
+ - **Documentation**: [ezmodo.com/mcp/docs](https://ezmodo.com/mcp/docs)
300
+ - **Support**: [ezmodo.com/support](https://ezmodo.com/support)
301
+ - **Email**: support@ezmodo.com
302
+
303
+ ## License
304
+
305
+ MIT
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Development Environment Configuration
3
+ *
4
+ * This config is for local development only.
5
+ * Points to localhost API server.
6
+ */
7
+
8
+ export const CONFIG = {
9
+ environment: 'development',
10
+ apiUrl: 'http://localhost:8080/api',
11
+ webUrl: 'http://localhost:3000',
12
+ settingsUrl: 'http://localhost:3000/settings/api-keys',
13
+
14
+ // Environment URLs for reference/docs
15
+ environmentUrls: {
16
+ development: 'http://localhost:8080/api',
17
+ staging: 'https://staging.ezmodo.com/api',
18
+ production: 'https://ezmodo.com/api',
19
+ }
20
+ };