@firfi/huly-mcp 0.11.0 → 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 CHANGED
@@ -30,6 +30,36 @@ The standard configuration works with most MCP clients:
30
30
  }
31
31
  ```
32
32
 
33
+ <details>
34
+ <summary>Codex</summary>
35
+
36
+ Use Codex's MCP manager:
37
+
38
+ ```bash
39
+ codex mcp add huly \
40
+ --env HULY_URL=https://huly.app \
41
+ --env HULY_EMAIL=your@email.com \
42
+ --env HULY_PASSWORD=yourpassword \
43
+ --env HULY_WORKSPACE=yourworkspace \
44
+ -- npx -y @firfi/huly-mcp@latest
45
+ ```
46
+
47
+ Or add it directly to `~/.codex/config.toml`:
48
+
49
+ ```toml
50
+ [mcp_servers.huly]
51
+ command = "npx"
52
+ args = ["-y", "@firfi/huly-mcp@latest"]
53
+
54
+ [mcp_servers.huly.env]
55
+ HULY_URL = "https://huly.app"
56
+ HULY_EMAIL = "your@email.com"
57
+ HULY_PASSWORD = "yourpassword"
58
+ HULY_WORKSPACE = "yourworkspace"
59
+ ```
60
+
61
+ </details>
62
+
33
63
  <details>
34
64
  <summary>Claude Code</summary>
35
65
 
@@ -59,7 +89,7 @@ Add the standard config to your `claude_desktop_config.json`:
59
89
  <details>
60
90
  <summary>VS Code</summary>
61
91
 
62
- Add to your user settings (`.vscode/mcp.json`) or use Command Palette "MCP: Add Server":
92
+ Add with Command Palette "MCP: Add Server", or put this in a VS Code MCP config such as `.vscode/mcp.json`. Do not commit workspace config files that contain real credentials.
63
93
 
64
94
  ```json
65
95
  {
@@ -94,16 +124,42 @@ Add the standard config to your Windsurf MCP configuration file.
94
124
 
95
125
  </details>
96
126
 
127
+ <details>
128
+ <summary>OpenCode</summary>
129
+
130
+ Open the global configuration file (`~/.config/opencode/opencode.json`) and merge this entry into your config:
131
+
132
+ ```json
133
+ {
134
+ "mcp": {
135
+ "huly": {
136
+ "type": "local",
137
+ "command": ["npx", "-y", "@firfi/huly-mcp@latest"],
138
+ "environment": {
139
+ "HULY_URL": "https://huly.app",
140
+ "HULY_EMAIL": "your@email.com",
141
+ "HULY_PASSWORD": "yourpassword",
142
+ "HULY_WORKSPACE": "yourworkspace"
143
+ }
144
+ }
145
+ }
146
+ }
147
+ ```
148
+
149
+ </details>
150
+
97
151
  ## Updating
98
152
 
99
- The `@latest` tag in the install command always fetches the newest version. Most MCP clients cache the installed package, so you need to force a re-fetch:
153
+ The `@latest` tag asks the package runner for the newest version. Some MCP clients keep server processes or resolved installs alive, so restart or re-add the server when updating:
100
154
 
101
155
  | Client | How to update |
102
156
  |--------|--------------|
157
+ | **Codex** | `codex mcp remove huly` then re-add with the install command above. If your password has shell-sensitive characters, edit `~/.codex/config.toml` directly instead |
103
158
  | **Claude Code** | `claude mcp remove huly` then re-add with the install command above |
104
159
  | **Claude Desktop** | Restart the app (it runs `npx` on startup) |
105
- | **VS Code / Cursor** | Restart the MCP server from the command palette or reload the window |
106
- | **npx (manual)** | `npx -y @firfi/huly-mcp@latest` the `-y` flag skips the cache when `@latest` resolves to a new version |
160
+ | **VS Code / Cursor** | Restart the MCP server from the command palette/configured client or reload the window |
161
+ | **OpenCode** | Restart OpenCode or start a new session after config changes |
162
+ | **npx (manual)** | `npx -y @firfi/huly-mcp@latest` — the `-y` flag auto-confirms install prompts |
107
163
 
108
164
  ## HTTP Transport
109
165
 
@@ -189,7 +245,7 @@ MCP_TRANSPORT=http MCP_HTTP_PORT=8080 MCP_HTTP_HOST=0.0.0.0 npx -y @firfi/huly-m
189
245
  | `remove_template_child` | Remove a child (sub-task) template from an issue template by its child ID. Get child IDs from get_issue_template response. |
190
246
  | `add_issue_relation` | Add a relation between two issues. Relation types: 'blocks' (source blocks target — pushes into target's blockedBy), 'is-blocked-by' (source is blocked by target — pushes into source's blockedBy), 'relates-to' (bidirectional link — updates both sides). targetIssue accepts cross-project identifiers like 'OTHER-42'. No-op if the relation already exists. |
191
247
  | `remove_issue_relation` | Remove a relation between two issues. Mirrors add_issue_relation: 'blocks' pulls from target's blockedBy, 'is-blocked-by' pulls from source's blockedBy, 'relates-to' pulls from both sides. No-op if the relation doesn't exist. |
192
- | `list_issue_relations` | List all relations of an issue. Returns blockedBy (issues blocking this one), relations (bidirectional issue links), and documents (linked documents with title/teamspace). Does NOT return issues that this issue blocks — use list_issue_relations on the target issue to see that. |
248
+ | `list_issue_relations` | List all relations of an issue. Returns blockedBy (issues blocking this one), blocks (issues this one blocks), relations (bidirectional issue links), and documents (linked documents with title/teamspace). |
193
249
  | `link_document_to_issue` | Link a Huly document to an issue. The link appears in the issue's Relations panel in the UI. Idempotent: no-op if the document is already linked. Use list_issue_relations to see linked documents. |
194
250
  | `unlink_document_from_issue` | Remove a document link from an issue. Idempotent: no-op if the document is not linked. |
195
251
 
@@ -285,6 +341,7 @@ MCP_TRANSPORT=http MCP_HTTP_PORT=8080 MCP_HTTP_HOST=0.0.0.0 npx -y @firfi/huly-m
285
341
  | `update_channel_message` | Update a channel message. Only the body can be modified. |
286
342
  | `delete_channel_message` | Permanently delete a channel message. This action cannot be undone. |
287
343
  | `list_direct_messages` | List direct message conversations in Huly. Returns conversations sorted by date (newest first). |
344
+ | `create_direct_message` | Open a one-to-one direct-message conversation with a workspace member. The `person` argument accepts an email or exact display name (e.g. `Smith,Bill`). Idempotent: if a DM with that participant already exists, returns it (`created: false`); otherwise creates a new DM (`created: true`). The returned `id` can be passed as `dm` to send_dm_message, list_dm_messages, etc. |
288
345
  | `list_dm_messages` | List messages in a direct-message conversation, newest first. The `dm` argument accepts either the DM `_id` or a participant display name (e.g. `Kerr,Shannon`); a name resolves only to a one-to-one DM with the authenticated account. |
289
346
  | `send_dm_message` | Send a message to a direct-message conversation. The `dm` argument accepts either the DM `_id` or a participant display name; a name resolves only to a one-to-one DM with the authenticated account. Message body supports markdown formatting. |
290
347
  | `update_dm_message` | Update a direct-message message. The `dm` argument accepts either the DM `_id` or a participant display name; a name resolves only to a one-to-one DM with the authenticated account. Only the body can be modified. |
@@ -331,7 +388,7 @@ MCP_TRANSPORT=http MCP_HTTP_PORT=8080 MCP_HTTP_HOST=0.0.0.0 npx -y @firfi/huly-m
331
388
 
332
389
  | Tool | Description |
333
390
  |------|-------------|
334
- | `list_activity` | List activity messages for a Huly object. Returns activity sorted by date (newest first). |
391
+ | `list_activity` | List activity messages for a Huly issue, document, channel, or raw Huly object. Prefer friendly targets: project+issueIdentifier for issues, teamspace+document for documents, or channel for channels. Advanced callers may pass objectId+objectClass directly. Returns activity sorted by date (newest first). |
335
392
  | `add_reaction` | Add an emoji reaction to an activity message. |
336
393
  | `remove_reaction` | Remove an emoji reaction from an activity message. |
337
394
  | `list_reactions` | List reactions on an activity message. |
@@ -470,17 +527,26 @@ MCP_TRANSPORT=http MCP_HTTP_PORT=8080 MCP_HTTP_HOST=0.0.0.0 npx -y @firfi/huly-m
470
527
 
471
528
  ### Passwords with special characters
472
529
 
473
- If your Huly password contains characters like `*`, `%`, `!`, or `#`, passing it via the CLI `-e` flag may fail because the shell interprets these characters before they reach the process.
530
+ If your Huly password contains characters like `*`, `%`, `!`, or `#`, passing it via CLI environment flags such as `-e` or `--env` may fail because the shell interprets these characters before they reach the process.
474
531
 
475
- **Solution**: Edit your MCP config file directly instead of using `claude mcp add -e`. In `~/.claude.json` (user scope) or `.mcp.json` (project scope), JSON handles all special characters natively:
532
+ **Solution**: Edit your MCP config file directly instead of passing the password through the shell:
533
+
534
+ - Codex: `~/.codex/config.toml`
535
+ - Claude Code: `~/.claude.json` (user scope) or `.mcp.json` (project scope)
536
+ - Claude Desktop: `claude_desktop_config.json` in the location listed in the installation section
537
+ - VS Code and Cursor: use the client config location from the installation section; avoid committing workspace files that contain real credentials
538
+ - Windsurf: edit your Windsurf MCP configuration file directly
539
+ - OpenCode: `~/.config/opencode/opencode.json`
540
+
541
+ For Claude JSON config, the shell-sensitive characters above can be written directly. JSON-reserved characters such as `"` and `\` still need normal JSON escaping:
476
542
 
477
543
  ```json
478
544
  {
479
545
  "mcpServers": {
480
546
  "huly": {
481
547
  "type": "stdio",
482
- "command": "node",
483
- "args": ["path/to/dist/index.cjs"],
548
+ "command": "npx",
549
+ "args": ["-y", "@firfi/huly-mcp@latest"],
484
550
  "env": {
485
551
  "HULY_URL": "https://your-huly-instance.com",
486
552
  "HULY_EMAIL": "you@example.com",