@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.
- package/README.md +305 -0
- package/config/development.js +20 -0
- package/config/endpoint-map.js +351 -0
- package/config/index.js +34 -0
- package/config/production.js +18 -0
- package/config/staging.js +18 -0
- package/handlers/access.js +141 -0
- package/handlers/activity.js +112 -0
- package/handlers/agents.js +95 -0
- package/handlers/ai-intelligence.js +55 -0
- package/handlers/attachments.js +30 -0
- package/handlers/catalogs.js +169 -0
- package/handlers/components.js +282 -0
- package/handlers/context-manifest.js +1150 -0
- package/handlers/decisions.js +114 -0
- package/handlers/designs.js +118 -0
- package/handlers/documents.js +227 -0
- package/handlers/entities.js +95 -0
- package/handlers/epics.js +190 -0
- package/handlers/facts.js +62 -0
- package/handlers/feature-flags.js +142 -0
- package/handlers/features.js +137 -0
- package/handlers/folders.js +127 -0
- package/handlers/git-context.js +917 -0
- package/handlers/github.js +72 -0
- package/handlers/graph.js +23 -0
- package/handlers/index.js +205 -0
- package/handlers/links.js +156 -0
- package/handlers/milestones.js +131 -0
- package/handlers/organizations.js +14 -0
- package/handlers/projects.js +122 -0
- package/handlers/recurring-tasks.js +33 -0
- package/handlers/tags.js +124 -0
- package/handlers/tasks.js +561 -0
- package/handlers/testing.js +116 -0
- package/handlers/todos.js +43 -0
- package/handlers/watchers.js +54 -0
- package/handlers/work-templates.js +32 -0
- package/index.js +175 -0
- package/lib/active-session.js +86 -0
- package/lib/auto-assign.js +93 -0
- package/lib/autolink.js +176 -0
- package/lib/changed-files.js +22 -0
- package/lib/env.js +45 -0
- package/lib/git-helpers.js +553 -0
- package/lib/git-utils.js +73 -0
- package/lib/http-client.js +164 -0
- package/lib/links-at-create.js +94 -0
- package/lib/local-cache.js +140 -0
- package/lib/logger.js +109 -0
- package/lib/manifest-loader.js +182 -0
- package/lib/manifest-query.js +686 -0
- package/lib/repo-config-dir.js +118 -0
- package/lib/version.js +10 -0
- package/lib/web-url.js +69 -0
- package/lib/worktree-tools.js +950 -0
- package/package.json +62 -0
- package/prompts/ai-workflow-automation.js +96 -0
- package/prompts/index.js +39 -0
- package/prompts/zephly-usage-guide-content.txt +631 -0
- package/prompts/zephly-usage-guide.js +119 -0
- package/tools/access-entity-types.js +28 -0
- package/tools/access.js +152 -0
- package/tools/activity.js +38 -0
- package/tools/agents.js +208 -0
- package/tools/ai-intelligence.js +111 -0
- package/tools/attachments.js +92 -0
- package/tools/catalogs.js +341 -0
- package/tools/components.js +249 -0
- package/tools/context-manifest.js +236 -0
- package/tools/decisions.js +168 -0
- package/tools/designs.js +222 -0
- package/tools/documents.js +287 -0
- package/tools/entities.js +223 -0
- package/tools/epics.js +267 -0
- package/tools/facts.js +70 -0
- package/tools/feature-flags.js +300 -0
- package/tools/features.js +246 -0
- package/tools/folders.js +122 -0
- package/tools/git-context.js +109 -0
- package/tools/github.js +172 -0
- package/tools/graph.js +70 -0
- package/tools/index.js +77 -0
- package/tools/link-params.js +93 -0
- package/tools/linkable-types.js +36 -0
- package/tools/links.js +199 -0
- package/tools/milestones.js +176 -0
- package/tools/organizations.js +23 -0
- package/tools/projects.js +172 -0
- package/tools/recurring-tasks.js +115 -0
- package/tools/tags.js +219 -0
- package/tools/task-item-schema.js +57 -0
- package/tools/task-type.js +33 -0
- package/tools/tasks.js +680 -0
- package/tools/testing.js +344 -0
- package/tools/todos.js +69 -0
- package/tools/watchers.js +81 -0
- 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
|
+
};
|