@firfi/huly-mcp 0.52.4 → 0.52.6

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 (3) hide show
  1. package/README.md +29 -26
  2. package/dist/index.cjs +100171 -105724
  3. package/package.json +7 -12
package/README.md CHANGED
@@ -10,10 +10,7 @@
10
10
 
11
11
  **Huly MCP** is a feature-complete MCP server for [Huly](https://huly.io/) integration. Published on npm as [`@firfi/huly-mcp`](https://www.npmjs.com/package/@firfi/huly-mcp).
12
12
 
13
- It connects to any Huly Platform deployment, so it should also work with the [Platform Collective](https://github.com/Platform-Collective/platform) fork and [TraceX](https://tracex.co) — unofficial for now.
14
-
15
- > [!IMPORTANT]
16
- > **Hosted Huly is shutting down.** Huly's upstream README says shutdown is expected July 20. If you use `https://huly.app`, [export and migrate your data](https://github.com/hcengineering/platform/blob/develop/README.md) as soon as possible. See the [backup and restore guide](https://github.com/hcengineering/platform/blob/develop/docs/guides/backup-restore.en.md) and [self-hosting repository](https://github.com/hcengineering/huly-selfhost). Self-hosted deployments are not affected.
13
+ It connects to Huly Platform deployments and should also work with the [Platform Collective](https://github.com/Platform-Collective/platform) and [TraceX](https://tracex.co) forks. [Intabia](https://platform.intabia.ru/) `0.8.33` / model `0.8.4` has been compatibility-tested; [known gaps are tracked in issue #279](https://github.com/dearlordylord/huly-mcp/issues/279). Fork support remains unofficial.
17
14
 
18
15
  ## Huly CLI Alternative
19
16
 
@@ -39,7 +36,7 @@ detected executable and required version, and the same `unsupported Node.js runt
39
36
  stderr. Upgrade Node.js or configure the MCP server command to use the absolute path of a compatible Node.js
40
37
  executable, then restart the MCP server. Huly operations remain unavailable until the runtime is upgraded.
41
38
 
42
- The standard configuration works with most MCP clients:
39
+ The standard configuration uses a Huly API token and works with most MCP clients:
43
40
 
44
41
  ```json
45
42
  {
@@ -49,8 +46,7 @@ The standard configuration works with most MCP clients:
49
46
  "args": ["-y", "@firfi/huly-mcp@latest"],
50
47
  "env": {
51
48
  "HULY_URL": "https://your-huly-instance.example.com",
52
- "HULY_EMAIL": "your@email.com",
53
- "HULY_PASSWORD": "yourpassword",
49
+ "HULY_TOKEN": "your-huly-api-token",
54
50
  "HULY_WORKSPACE": "yourworkspace"
55
51
  }
56
52
  }
@@ -58,6 +54,12 @@ The standard configuration works with most MCP clients:
58
54
  }
59
55
  ```
60
56
 
57
+ Prefer a managed API token created in Huly account settings when the target deployment supports it. Managed tokens
58
+ are bound to one workspace, assigned an expiry, and can be revoked without changing the account password. They still
59
+ inherit the account's full rights in that workspace, so use a dedicated integration account with only the workspace
60
+ role, space memberships, and data access the automation needs. Older Huly deployments may not expose managed token
61
+ settings; email/password authentication remains available as a compatibility fallback.
62
+
61
63
  ## Tool Exposure Defaults
62
64
 
63
65
  By default (`HULY_TOOL_MODE=auto`), Huly MCP optimizes for current MCP clients by avoiding a 470-tool eager list. Exact `claude-code` sessions receive native Huly tools. Codex, Cursor, Windsurf, Copilot, OpenCode, Claude AI/Desktop-style clients, and unknown clients receive a small proxy surface: `list_tool_categories`, `search_tools`, `get_tool_schema`, and `invoke_tool`.
@@ -72,8 +74,7 @@ Use Codex's MCP manager:
72
74
  ```bash
73
75
  codex mcp add huly \
74
76
  --env HULY_URL=https://your-huly-instance.example.com \
75
- --env HULY_EMAIL=your@email.com \
76
- --env HULY_PASSWORD=yourpassword \
77
+ --env HULY_TOKEN=your-huly-api-token \
77
78
  --env HULY_WORKSPACE=yourworkspace \
78
79
  -- npx -y @firfi/huly-mcp@latest
79
80
  ```
@@ -87,8 +88,7 @@ args = ["-y", "@firfi/huly-mcp@latest"]
87
88
 
88
89
  [mcp_servers.huly.env]
89
90
  HULY_URL = "https://your-huly-instance.example.com"
90
- HULY_EMAIL = "your@email.com"
91
- HULY_PASSWORD = "yourpassword"
91
+ HULY_TOKEN = "your-huly-api-token"
92
92
  HULY_WORKSPACE = "yourworkspace"
93
93
  ```
94
94
 
@@ -100,8 +100,7 @@ HULY_WORKSPACE = "yourworkspace"
100
100
  ```bash
101
101
  claude mcp add huly \
102
102
  -e HULY_URL=https://your-huly-instance.example.com \
103
- -e HULY_EMAIL=your@email.com \
104
- -e HULY_PASSWORD=yourpassword \
103
+ -e HULY_TOKEN=your-huly-api-token \
105
104
  -e HULY_WORKSPACE=yourworkspace \
106
105
  -- npx -y @firfi/huly-mcp@latest
107
106
  ```
@@ -133,8 +132,7 @@ Add with Command Palette → "MCP: Add Server", or put this in a VS Code MCP con
133
132
  "args": ["-y", "@firfi/huly-mcp@latest"],
134
133
  "env": {
135
134
  "HULY_URL": "https://your-huly-instance.example.com",
136
- "HULY_EMAIL": "your@email.com",
137
- "HULY_PASSWORD": "yourpassword",
135
+ "HULY_TOKEN": "your-huly-api-token",
138
136
  "HULY_WORKSPACE": "yourworkspace"
139
137
  }
140
138
  }
@@ -171,8 +169,7 @@ Open the global configuration file (`~/.config/opencode/opencode.json`) and merg
171
169
  "command": ["npx", "-y", "@firfi/huly-mcp@latest"],
172
170
  "environment": {
173
171
  "HULY_URL": "https://your-huly-instance.example.com",
174
- "HULY_EMAIL": "your@email.com",
175
- "HULY_PASSWORD": "yourpassword",
172
+ "HULY_TOKEN": "your-huly-api-token",
176
173
  "HULY_WORKSPACE": "yourworkspace"
177
174
  }
178
175
  }
@@ -229,8 +226,7 @@ By default, the server uses stdio transport. For HTTP transport:
229
226
 
230
227
  ```bash
231
228
  HULY_URL=https://your-huly-instance.example.com \
232
- HULY_EMAIL=your@email.com \
233
- HULY_PASSWORD=yourpassword \
229
+ HULY_TOKEN=your-huly-api-token \
234
230
  HULY_WORKSPACE=yourworkspace \
235
231
  MCP_TRANSPORT=http \
236
232
  npx -y @firfi/huly-mcp@latest
@@ -246,7 +242,9 @@ MCP_TRANSPORT=http MCP_HTTP_PORT=8080 MCP_HTTP_HOST=0.0.0.0 npx -y @firfi/huly-m
246
242
 
247
243
  ### HTTP MCP Protocol Support
248
244
 
249
- Both stdio and HTTP implement the released MCP `2026-07-28` interface and retain SDK-owned compatibility for MCP `2025-06-18` clients. Stdio pins each connection to the protocol era selected by its opening exchange; HTTP serves legacy requests statelessly. Modern HTTP requires one JSON-RPC message per POST, `Accept: application/json, text/event-stream`, `MCP-Protocol-Version: 2026-07-28`, `Mcp-Method`, method-specific `Mcp-Name`, and per-request `_meta.io.modelcontextprotocol/*` client metadata. Huly credentials are configured separately through env vars or supported `x-huly-*` headers.
245
+ Both transports are implemented with Effect AI's MCP server and protocol adapters. The server configures the released MCP `2026-07-28` stateless protocol and the MCP `2025-06-18` compatibility protocol. Modern HTTP requires one JSON-RPC message per POST, `Accept: application/json, text/event-stream`, `MCP-Protocol-Version: 2026-07-28`, `Mcp-Method`, method-specific `Mcp-Name`, and per-request `_meta.io.modelcontextprotocol/*` client metadata. Legacy HTTP supports initialized sessions using the returned `Mcp-Session-Id` and bare stateless calls with request-local bindings. Huly credentials are configured separately through env vars or supported `x-huly-*` headers.
246
+
247
+ See [MCP transport architecture and certification](docs/MCP_TRANSPORT_CERTIFICATION.md) for the implementation boundary and the current verification record.
250
248
 
251
249
  For hosted or tunneled HTTP deployments, you can require an MCP endpoint bearer token:
252
250
 
@@ -286,9 +284,9 @@ For a Smithery publish schema example, see [docs/SMITHERY_URL_PUBLISH.md](docs/S
286
284
  | Variable | Required | Description |
287
285
  |----------|----------|-------------|
288
286
  | `HULY_URL` | Yes | Reachable self-hosted or replacement hosted Huly instance URL |
289
- | `HULY_EMAIL` | Auth* | Account email |
290
- | `HULY_PASSWORD` | Auth* | Account password |
291
- | `HULY_TOKEN` | Auth* | API token (alternative to email/password) |
287
+ | `HULY_TOKEN` | Auth* | Preferred: managed Huly API token where supported |
288
+ | `HULY_EMAIL` | Auth* | Compatibility fallback: account email |
289
+ | `HULY_PASSWORD` | Auth* | Compatibility fallback: account password |
292
290
  | `HULY_WORKSPACE` | Yes | Workspace identifier |
293
291
  | `HULY_CONNECTION_TIMEOUT` | No | Connection timeout in ms. Omit to use the package default. |
294
292
  | `MCP_TRANSPORT` | No | Transport type: `stdio` (default) or `http` |
@@ -300,7 +298,8 @@ For a Smithery publish schema example, see [docs/SMITHERY_URL_PUBLISH.md](docs/S
300
298
  | `TOOLSETS` | No | Comma-separated tool categories to expose. If neither `TOOLSETS` nor `TOOLS` is set, all native Huly tools are exposed. Example: `issues,projects,search` |
301
299
  | `TOOLS` | No | Comma-separated exact tool names to expose in addition to selected toolsets. Example: `list_documents,create_issue` |
302
300
 
303
- *Auth: Provide either `HULY_EMAIL` + `HULY_PASSWORD` or `HULY_TOKEN`.
301
+ *Auth: Prefer `HULY_TOKEN`. Use `HULY_EMAIL` + `HULY_PASSWORD` only when the Huly deployment does not support a
302
+ managed API token or another compatibility constraint requires password authentication.
304
303
 
305
304
  ## Built-in Diagnostic Tools
306
305
 
@@ -362,6 +361,9 @@ When resolved tool exposure is `proxy`, clients see the built-in tools plus thes
362
361
  | Tool | Description |
363
362
  |------|-------------|
364
363
  | `preview_deletion` | Preview the impact of deleting a Huly entity before actually deleting it. Shows affected sub-entities, relations, and warnings. Supports issues, projects, components, and milestones. Use this to understand cascade effects before calling a delete operation. |
364
+ | `list_external_tracker_targets` | List external issue-tracker targets mapped to a Huly project. Omit provider to list every provider supported by this server, or pass provider:'github' to list mapped GitHub repositories. Returns each target's provider, kind, stable Huly ID, exact name, enabled state, and an actionable unavailable reason when known. This discovers Huly configuration only; it does not call the external provider or prove that the synchronization worker is running. |
365
+ | `publish_issue_to_external_tracker` | Request publication of an existing Huly issue as a new issue in Huly's configured external tracker. Identify the issue with project and its human identifier (for example, HULY-123); provider currently accepts only 'github'. Select target by stable Huly target ID or exact name, or omit target only when exactly one enabled target is mapped to the project. Publication is asynchronous: pending means Huly accepted the request, not that an external issue exists. Repeating the same target is safe while pending or published; a failed same-target request retries, while a different target is rejected. Use get_issue_publication_status to observe completion. |
366
+ | `get_issue_publication_status` | Read the Huly-persisted external publication state for an issue identified by project and human issue identifier. Returns not_requested, pending, published, or failed; pending includes the ISO state-change timestamp and elapsed time, while published includes an external URL and positive issue number. A timeout is projected as failed only after the bounded wait, and later persisted publication takes precedence. This reads Huly state and never calls the external provider directly. |
365
367
  | `list_components` | List components in a Huly project. Components organize issues by area/feature. Returns components sorted by modification date (newest first). |
366
368
  | `get_component` | Retrieve full details for a Huly component. Use this to view component content and metadata. |
367
369
  | `create_component` | Create a new component in a Huly project. Components help organize issues by area/feature. Description supports markdown. Markdown links to current-workspace Huly browse URLs with _class, _id, and label become native Huly references; external URLs and other-workspace browse URLs stay normal links. Returns the created component ID and label. |
@@ -1184,7 +1186,7 @@ When resolved tool exposure is `proxy`, clients see the built-in tools plus thes
1184
1186
 
1185
1187
  ## Troubleshooting
1186
1188
 
1187
- ### Passwords with special characters
1189
+ ### Password fallback with special characters
1188
1190
 
1189
1191
  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.
1190
1192
 
@@ -1217,7 +1219,8 @@ For Claude JSON config, the shell-sensitive characters above can be written dire
1217
1219
  }
1218
1220
  ```
1219
1221
 
1220
- Alternatively, use `HULY_TOKEN` instead of email/password to bypass password auth entirely (see [Environment Variables](#environment-variables)).
1222
+ Prefer `HULY_TOKEN` instead of this password fallback when the deployment supports managed API tokens (see
1223
+ [Environment Variables](#environment-variables)).
1221
1224
 
1222
1225
  ### MCP client shows "Failed to reconnect"
1223
1226