Huly MCP: feature-complete MCP server for Huly integration
io.github.dearlordylord/huly-mcp (Huly MCP)
Huly MCP is a feature-complete Model Context Protocol (MCP) server for Huly integration. The project is distributed as an npm package (@firfi/huly-mcp) and is implemented in TypeScript. It is designed for developer tools workflows involving automation, command-line usage, and agent-driven coding tasks.
🛠️ Key Features
MCP-compatible server for Huly
Package published on npm (@firfi/huly-mcp)
TypeScript-based implementation
Topics indicate support across automation and developer tools
🚀 Use Cases
Integrating MCP with Huly-based issue/task/project tracking
Using Huly via command-line interface workflows
Supporting coding agents and terminal-based development
⚡ Developer Benefits
MCP compatibility for model-context workflows
Alignment with developer tooling categories (developer-tools, automation)
Clear ecosystem positioning through npm, TypeScript, and agent tooling topics
⚠️ Limitations
Server functionality beyond “Huly integration” is not specified in the provided source excerpt
Looking for a Huly CLI, terminal-native Huly integration, or a scripting and automation alternative to running an MCP server? Huly CLI is a feature-complete command-line interface for Huly, published as @firfi/huly-cli, with full Huly operation parity with Huly MCP. It exposes the same Huly operations as native, schema-aware commands with human-readable or JSON output, file-backed inputs, uploads, and downloads.
Huly MCP and Huly CLI are maintained together in this monorepo and derive from the same shared operation registry, keeping operation inputs, outputs, warnings, and typed failures aligned. See the Huly CLI documentation for the complete generated command reference, or browse CLI examples, Huly automation patterns, and the Huly MCP vs CLI comparison.
Installation
Node.js requirement
Huly MCP requires Node.js 22.19.0 or later. MCP clients do not provide a Node.js runtime: node, npx,
and the #!/usr/bin/env node package executable resolve Node.js from the environment in which the MCP client
runs. Check that environment before installation:
bash
node --version
If an MCP client starts Huly MCP with an older runtime, Huly MCP initializes a diagnostic-only MCP surface instead
of loading the incompatible application. Its server instructions and get_huly_startup_diagnostic tool report the
detected executable and required version, and the same unsupported Node.js runtime diagnostic is written to
stderr. Upgrade Node.js or configure the MCP server command to use the absolute path of a compatible Node.js
executable, then restart the MCP server. Huly operations remain unavailable until the runtime is upgraded.
The standard configuration works with most MCP clients:
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.
Exact native tool names still dispatch when a client calls them directly, but many clients only call tools returned by tools/list. Set HULY_TOOL_MODE=native to make every Huly tool appear first-class, or use TOOLSETS / TOOLS to pin frequently used native tools while keeping proxy discovery available.
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.
Pi requires an MCP adapter. Install it, then use Huly MCP in auto mode with the four proxy tools
promoted into Pi's native tool list:
bash
pi install npm:pi-mcp-adapter
See the Pi setup guide for the user-global configuration, optional
TOOLSETS/TOOLS native pins, and verification steps.
Updating
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:
Client
How to update
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
Claude Code
claude mcp remove huly then re-add with the install command above
Claude Desktop
Restart the app (it runs npx on startup)
VS Code / Cursor
Restart the MCP server from the command palette/configured client or reload the window
OpenCode
Restart OpenCode or start a new session after config changes
Pi
Run /mcp reconnect huly, then /reload if the registered direct-tool surface changed
npx (manual)
npx -y @firfi/huly-mcp@latest — the -y flag auto-confirms install prompts
Maintainer Production Release
Publish from a clean, current master checkout with the preferred certified Node.js runtime:
bash
mise exec node@24.15.0 -- pnpm local-release
Use this exact command even when a newer Node.js version is active on the host. The release build accepts only the
exact Node.js versions certified by CI; this is intentionally narrower than the package's runtime requirement. See
the production release guide for preflight checks, rerun behavior, and verification.
HTTP Transport
By default, the server uses stdio transport. For HTTP transport:
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.
For hosted or tunneled HTTP deployments, you can require an MCP endpoint bearer token:
MCP_AUTH_TOKEN protects only the MCP HTTP /mcp endpoint. It is unrelated to HULY_TOKEN, does not authenticate to Huly, and does not replace HULY_EMAIL / HULY_PASSWORD / HULY_TOKEN. Huly credentials are still required through process env vars or, for hosted URL deployments, the supported x-huly-* headers. Stdio deployments do not use MCP_AUTH_TOKEN.
Hosted HTTP Header Configuration
For hosted URL deployments, keep the server process configured with MCP_TRANSPORT=http. A hosting layer can forward per-session Huly credentials as request headers, so one hosted server can serve different Huly workspaces without process-wide HULY_* env vars.
Supported v1 headers:
Header
Required
Description
x-huly-url
Yes
Huly instance URL
x-huly-workspace
Yes
Workspace identifier
x-huly-token
Yes
Huly API token
x-huly-connection-timeout
No
Connection timeout in ms
If any supported x-huly-* header is present, all required headers must be present and unsupported x-huly-* headers are rejected. Requests with only unsupported x-huly-* headers (for example a proxy trace id) use the process environment configuration. Missing values are not filled from environment variables. Email/password auth is not supported in hosted header configuration v1.
Reachable self-hosted or replacement hosted Huly instance URL
HULY_EMAIL
Auth*
Account email
HULY_PASSWORD
Auth*
Account password
HULY_TOKEN
Auth*
API token (alternative to email/password)
HULY_WORKSPACE
Yes
Workspace identifier
HULY_CONNECTION_TIMEOUT
No
Connection timeout in ms. Omit to use the package default.
MCP_TRANSPORT
No
Transport type: stdio (default) or http
MCP_HTTP_PORT
No
HTTP server port (falls back to PORT, then 3000)
MCP_HTTP_HOST
No
HTTP server host. Omit to bind to the package default loopback host.
MCP_AUTH_TOKEN
No
Optional bearer token required by HTTP clients for /mcp. This protects the MCP endpoint only; it is not a Huly API token.
HULY_TOOL_MODE
No
Tool exposure mode: auto (default), native, or proxy. auto keeps exact claude-code native and resolves Codex, Cursor, Windsurf, Copilot, opencode, Claude AI, and unknown clients to proxy mode.
PROXY_OUTPUT_STRICT
No
Proxy candidate strictness: false (default) keeps proxy discovery broad; true makes active TOOLSETS / TOOLS a hard allow-list for proxy search, schema lookup, and invocation.
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
TOOLS
No
Comma-separated exact tool names to expose in addition to selected toolsets. Example: list_documents,create_issue
*Auth: Provide either HULY_EMAIL + HULY_PASSWORD or HULY_TOKEN.
Built-in Diagnostic Tools
get_version returns the current server version and latest npm version.
get_huly_context returns sanitized runtime/configuration context for the current MCP session without connecting to Huly. It reports package version, transport, auth mode, sanitized Huly URL origin/host/protocol, workspace, timeout, config sources, native tool scope filtering, and resolved native/proxy tool exposure. Tokens, passwords, email values, credential headers, URL paths, URL query strings, and URL credentials are never returned.
MCP Resources
The server exposes read-only MCP Resources as JSON context for clients that support resources/read.
Template
Name
Description
MIME Type
huly://projects/{project}
huly-project
Read full details for a Huly tracker project by project identifier, for example huly://projects/HULY.
application/json
huly://issues/{issue}
huly-issue
Read full details for a Huly issue by full issue identifier, for example huly://issues/HULY-123.
application/json
huly://projects/{project}/issues/{issue}
huly-project-issue
Read full details for a Huly issue by project identifier and issue number, for example huly://projects/HULY/issues/123.
application/json
resources/list returns concrete active project resources. Issue resources are template-based: use resources/templates/list to discover supported issue URI templates, then read a known issue URI.
Backlog
Feature backlog and SDK parity notes live in docs/BACKLOG.md.
Available Tools
When resolved tool exposure is proxy, clients see the built-in tools plus these proxy meta-tools. Native Huly tools are then discovered and invoked through the proxy candidate catalog. Exact native tool names also dispatch when a client calls them directly, subject to PROXY_OUTPUT_STRICT scope rules, but hidden native tools are not advertised through tools/list.
Proxy Meta-Tools
Tool
Description
list_tool_categories
Lists Huly tool categories available through this proxy. Use this first when you need a broad map of capabilities before searching for a specific Huly tool.
search_tools
Searches the current proxy-visible Huly tool catalog by tool name, category, description, and parameter names. Returns exact tool names plus required and optional parameter names for single-call follow-up with get_tool_schema or invoke_tool.
get_tool_schema
Returns the exact input and output schema for one proxy-visible Huly tool. Use this before invoke_tool when you are not certain about required argument names or result shape.
invoke_tool
Invokes one proxy-visible Huly tool by exact name with its arguments. This tool can call read or write Huly operations; check get_tool_schema and the target tool annotations when safety matters.
List low-level per-project tracker target preference records. These Huly ProjectTargetPreference records are attached to projects and used by tracker UI/workflows to remember target-related preference props. Omit project to list recent preferences across projects, or pass a project identifier to inspect one project's preference. Props are SDK-open key/value payloads.
upsert_project_target_preference
Create or update the low-level ProjectTargetPreference record for a project. This refreshes usedOn and merges SDK-open target preference props by key. Use for tracker SDK parity or advanced administration; ordinary project and issue workflows usually do not need this tool.
list_projects
List all Huly projects. Returns projects sorted by name. Supports filtering by archived status.
get_project
Get full details of a Huly project including its statuses. Returns project name, description, archived flag, default status, and all available statuses.
list_statuses
List all issue statuses for a Huly project with workflow category and default info. Returns status name, category, and isDefault. Use this to discover valid statuses before creating or updating issues.
create_project
Create a new Huly tracker project. Idempotent: returns existing project if one with the same identifier already exists (created=false). Identifier must be 1-5 uppercase alphanumeric chars starting with a letter.
update_project
Update a Huly project. Only provided fields are modified. Set description to null to clear it.
delete_project
Permanently delete a Huly project. All issues, milestones, and components in this project will be orphaned. This action cannot be undone.
Issues
Tool
Description
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.
list_components
List components in a Huly project. Components organize issues by area/feature. Returns components sorted by modification date (newest first).
get_component
Retrieve full details for a Huly component. Use this to view component content and metadata.
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.
update_component
Update fields on an existing Huly component. Only provided fields are modified. 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.
set_issue_component
Set or clear the component on a Huly issue. Pass null for component to clear it.
delete_component
Permanently delete a Huly component. This action cannot be undone.
list_issues
Query Huly issues with optional filters. Returns issues sorted by modification date (newest first). Supports filtering by project, exact workflow status name (status), Huly SDK task.statusCategory key (statusCategory: UnStarted, ToDo, Active, Won, Lost), assignee (email, Person display name, or exact agent UserProfile title), creator (raw Person ID, exact email, or exact display name), component, a human-readable attached label title (label, exact and case-insensitive), milestone (project-scoped ID or exact case-insensitive label), milestone presence (hasMilestone), parentIssue (to list children of a specific issue), and isTopLevel (to return only native top-level issues). Creator, label, and milestone filters are applied before the result limit; ambiguous creator display names fail actionably and unknown creators return an empty list. Each result includes creator as a stable Person reference { id, name?, email? } when resolvable and the assigned milestone as { id, label } when resolvable. Supports searching by title substring (titleSearch) and description content (descriptionSearch). Each result includes deterministic label summaries with title and available color; missing labels are an empty array, duplicate titles collapse case-insensitively while preferring a valid color, and unusable partial attachments are omitted with a tool warning.
get_issue
Retrieve full details for a Huly issue including markdown description, its creator as a stable Person reference { id, name?, email? } when resolvable, its assigned milestone as { id, label } when resolvable, and deterministic attached-label summaries with title and available color. Missing labels are an empty array, duplicate titles collapse case-insensitively while preferring a valid color, and unusable partial creator or label metadata is omitted with one bounded tool warning. Use this to view issue content, comments, classification, or full metadata.
create_issue
Create a new issue in a Huly project. Assignee accepts an email, Person display name, or exact agent UserProfile title and always stores the linked Person. Omit parentIssue for a native top-level issue, or specify parentIssue to create a sub-issue. Optionally set taskType by ID or display name; it is resolved within the target project's project type, and status is validated against that task type's workflow. Use list_task_types or get_project_type to discover valid task types and statuses. Description supports markdown formatting; markdown links to current-workspace Huly browse URLs with _class, _id, and label become native references, while external URLs stay normal links. Returns the created issue identifier.
update_issue
Update fields on an existing Huly issue. Assignee accepts an email, Person display name, or exact agent UserProfile title and always stores the linked Person; use null to unassign. Optionally set taskType by ID or display name; it is resolved within the target project's project type, and the status is preserved only when valid for the new task type. Use list_task_types or get_project_type to discover valid task types and statuses. Only provided fields are modified. Description updates support markdown; markdown links to current-workspace Huly browse URLs with _class, _id, and label become native references, while external URLs stay normal links.
add_issue_label
Add a tag/label to a Huly issue. Creates the tag if it doesn't exist in the project.
remove_issue_label
Remove a tag/label from a Huly issue. Detaches the label reference; does not delete the label definition.
delete_issue
Permanently delete a Huly issue. This action cannot be undone.
move_issue
Move an issue to a new parent (making it a sub-issue), or pass null to restore its native top-level shape. Updates parent/child relationships and sub-issue counts.
list_issue_templates
List issue templates in a Huly project. Templates define reusable issue configurations. Returns templates sorted by modification date (newest first).
get_issue_template
Retrieve full details for a Huly issue template including children (sub-task templates). Use this to view template content, default values, and child template IDs.
create_issue_template
Create a new issue template in a Huly project. Templates define default values for new issues. Template and child descriptions support 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. Optionally include children (sub-task templates) that will become sub-issues when creating issues from this template. Returns the created template ID and title.
create_issue_from_template
Create a new issue from a template. Applies template defaults, allowing overrides for specific fields. Description override 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. If the template has children (sub-task templates), sub-issues are created automatically unless includeChildren is set to false. Returns the created issue identifier and count of children created.
update_issue_template
Update fields on an existing Huly issue template. Only provided fields are modified. 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.
delete_issue_template
Permanently delete a Huly issue template. This action cannot be undone.
add_template_child
Add a child (sub-task) template to an issue template. The child defines default values for sub-issues created when using create_issue_from_template. Child 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 child template ID.
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.
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.
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.
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).
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.
unlink_document_from_issue
Remove a document link from an issue. Idempotent: no-op if the document is not linked.
list_related_issue_targets
List rules that choose the default destination project for related issues. A spaceRule says related issues from one space default to targetProject. A classRule says related issues for one object class default to targetProject. targetProject is a project identifier, or null for no default destination project.
set_related_issue_target
Set the default destination project for related issues from a space or object class. For space, creates or updates a spaceRule. For objectClass, only updates an existing classRule; this tool never creates classRule targets. Pass targetProject as a project identifier, or null to clear the default destination project.
delete_related_issue_space_target
Delete the spaceRule that chooses the default destination project for related issues from one space. This only deletes spaceRule targets; classRule deletion is intentionally unsupported because class rules may be model-provided.
Comments
Tool
Description
list_comments
List comments on a Huly issue. Returns comments sorted by creation date (oldest first).
add_comment
Add a comment to a Huly issue. Comment body supports markdown formatting. 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.
update_comment
Update an existing comment on a Huly issue. Comment body supports markdown formatting. 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.
delete_comment
Delete a comment from a Huly issue. This action cannot be undone.
Milestones
Tool
Description
list_milestones
List milestones in a Huly project. Returns milestones sorted by modification date (newest first).
get_milestone
Retrieve full details for a Huly milestone. Use this to view milestone content and metadata.
create_milestone
Create a new milestone in a Huly project. 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 milestone ID and label.
update_milestone
Update fields on an existing Huly milestone. Only provided fields are modified. 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.
set_issue_milestone
Set or clear the milestone on a Huly issue. Pass null for milestone to clear it.
delete_milestone
Permanently delete a Huly milestone. This action cannot be undone.
Documents
Tool
Description
list_document_snapshots
List version-history snapshots for one Huly document. A snapshot is a saved point-in-time copy from the document's change history. Resolve the document by teamspace plus document title or ID. Returns snapshotId, documentId, teamspaceId, title, parentDocumentId, and timestamps; markdown content is intentionally omitted. Use get_document_snapshot with snapshotId when reading content.
get_document_snapshot
Get one point-in-time Huly document history snapshot and return markdown content. Resolve the document by teamspace plus document title or ID; resolve the snapshot by snapshotId, exact snapshot title, or exact createdOn timestamp. Prefer snapshotId from list_document_snapshots when titles or dates may collide. Restore is out of scope.
list_teamspaces
List all Huly document teamspaces. Returns teamspaces sorted by name. Supports filtering by archived status.
get_teamspace
Get details for a Huly document teamspace including document count. Finds by name or ID, including archived teamspaces.
create_teamspace
Create a new Huly document teamspace. Idempotent: returns existing teamspace if one with the same name exists.
update_teamspace
Update fields on an existing Huly document teamspace. Only provided fields are modified. Set description to null to clear it.
delete_teamspace
Permanently delete a Huly document teamspace. This action cannot be undone.
list_documents
List documents in a Huly teamspace. Returns documents sorted by modification date (newest first). Each result includes a 'url' field pointing to the document in the Huly web app. Supports searching by title substring (titleSearch) and content (contentSearch).
get_document
Retrieve full details for a Huly document including markdown content and a 'url' field pointing to the document in the Huly web app. Use this to view document content and metadata.
create_document
Create a new document in a Huly teamspace. Content is markdown and supports native Mermaid diagrams (```mermaid blocks render interactively in Huly UI). Use markdown links to current-workspace Huly browse URLs for native references; Huly browse links returned in get_document content round-trip as native references. The URL identifies the object; link text is display text; plain issue keys stay text. External URLs stay normal markdown links. Optionally pass parent as a document title or ID to create a nested child document; invalid parents fail instead of silently creating a top-level document. Returns the created document id and a 'url' field pointing to the document in the Huly web app. Use link_document_to_issue only if you also want an issue-document association.
edit_document
Edit an existing Huly document. You may rename with title and/or edit the body. Body editing has two mutually exclusive modes: (1) content replaces the entire markdown body, (2) old_text + new_text performs exact targeted search-and-replace. Use markdown links to current-workspace Huly browse URLs for native references; Huly browse links returned in get_document content round-trip as native references. The URL identifies the object; link text is display text; plain issue keys stay text. External URLs stay normal markdown links. For targeted replace, multiple matches error unless replace_all is true; empty new_text deletes matched text. Content supports native Mermaid diagrams. Returns a 'url' field pointing to the document in the Huly web app.
list_inline_comments
List inline comment threads from a Huly document. Extracts comments embedded in document content as ProseMirror marks. Each comment includes the highlighted text and thread ID. Set includeReplies=true to also fetch thread reply messages with sender names.
delete_document
Permanently delete a Huly document. This action cannot be undone.
list_document_label_definitions
List label definitions available for ordinary Huly documents by optional title substring. Does not expose raw target-class or category mechanics.
list_document_labels
List labels attached to one ordinary Huly document. Resolves the teamspace by name or ID and the document by title or ID; no raw class, space, or collection values are needed.
add_document_label
Idempotently attach a label to an ordinary Huly document resolved by teamspace and title or ID. label accepts a definition ID or exact title; a missing title creates the document label definition first, while duplicate exact titles return candidate IDs.
remove_document_label
Detach a label from one ordinary Huly document without deleting the reusable label definition. Returns detached=false when the label exists but is not attached; duplicate exact titles return candidate IDs.
Storage
Tool
Description
upload_file
Upload a file to Huly storage. Provide one source: filePath is resolved on the MCP server host, data is client-local base64 content, and fileUrl is fetched by the MCP server. Returns the blob ID and URL.
Attachments
Tool
Description
list_attachments
List attachments on a Huly object (issue, document, etc.). Returns attachments sorted by modification date (newest first).
get_attachment
Retrieve full details for a Huly attachment including download URL.
add_attachment
Add an attachment to a Huly object. Provide one source: filePath is resolved on the MCP server host, data is client-local base64 content, and fileUrl is fetched by the MCP server. Returns the attachment ID and download URL.
Permanently delete an attachment. This action cannot be undone.
pin_attachment
Pin or unpin an attachment.
download_attachment
Get download URL for an attachment along with file metadata (name, type, size).
read_attachment_content
Return a supported image attachment (JPEG, PNG, GIF, or WebP; maximum 4 MiB) as one MCP image content block plus metadata-only structured content. Use this to inspect screenshots or pictures directly. For non-image, unsupported, or oversized files, call download_attachment to get a URL instead.
add_issue_attachment
Add an attachment to a Huly issue resolved by project and identifier. Provide one source: filePath is resolved on the MCP server host, data is client-local base64 content, and fileUrl is fetched by the MCP server.
add_document_attachment
Add an attachment to a Huly document resolved by teamspace and title/ID. Provide one source: filePath is resolved on the MCP server host, data is client-local base64 content, and fileUrl is fetched by the MCP server.
save_attachment
Save/bookmark an attachment for later reference. Idempotent when already saved.
unsave_attachment
Remove an attachment from saved/bookmarks.
list_saved_attachments
List saved/bookmarked attachments for the current user.
list_drawings
List drawings attached to a raw Huly parent object.
get_drawing
Get a drawing by ID.
create_drawing
Create a drawing under a raw Huly parent object.
update_drawing
Update drawing content. Pass null content to clear it.
delete_drawing
Delete a drawing. This action cannot be undone.
Contacts
Tool
Description
list_employees
List employees (persons who are team members), sorted by modification date (newest first). Each summary exposes stable Contact Employee fields city, email, role, statuses count, personUuid, position, active, and modifiedOn. SDK avatarType/avatar/avatarProps are provider/blob metadata; attachment/comment/channel counters and social identity collections are derived; birthday/profile need separate contracts; createdOn/createdBy/modifiedBy and class/space refs are internal metadata and intentionally unsupported in this projection.
set_employee_position
Idempotently set an employee's official position on contact.mixin.Employee. employee must be an object with exactly one locator field: {id}, {email}, or {name}; combined locator modalities are rejected. The selected ID, email, or display name is exact, and duplicate email/name matches are rejected. The position field is required: pass a string to set it, or null/an empty string to clear it. Omitting position fails schema parsing and performs no mutation. This updates the Contact Employee mixin, not an HR Staff record.
invite_employee
Create or promote and invite an employee, or resend an inactive employee invitation. mode=create-or-promote requires the exact Huly display name and email; one checked atomic transaction creates or updates the Person, email SocialIdentity, and active Employee before sending. A changed authoritative precondition sends no invite and directs the caller to retry in a fresh session. mode=invite-existing requires an exact email/name locator and rejects active or non-Employee targets. Omitted role preserves the Employee role; an explicit different role is persisted atomically before resend. Returns no invitation link, credential, or token; an invitation-provider failure reports completed preparation.
list_inactive_employees
List every inactive Employee before applying output pagination. Each result distinguishes the account link, workspace membership and role, Person identity, and Employee active state so an agent can choose reinvite, deactivate, or kick safely.
deactivate_employee
Preview or execute an employee lifecycle change resolved by exact email or exact display name. action=deactivate only sets Employee.active=false and retains workspace membership; action=kick then removes the linked account from the workspace. If workspace removal fails after deactivation, the typed partial failure lists completed changes and directs a safe preview-and-retry. Preview is the default. Execution requires execute=true plus one exact expected relationship object copied from the preview: unlinked, linked-without-membership, or workspace-member. Any changed Person ID, account UUID, Employee active flag, membership, or workspace role is rejected. The authenticated employee cannot target itself.
list_persons
List all persons in the Huly workspace. Returns persons sorted by modification date (newest first). Supports searching by name substring (nameSearch) and email substring (emailSearch).
get_person
Retrieve full details for a person including contact channels. Use personId or email to identify the person.
create_person
Create a new person in Huly. Returns the created person ID.
update_person
Update fields on an existing person. Only provided fields are modified.
delete_person
Permanently delete a person from Huly. This action cannot be undone.
list_contact_channel_providers
List supported contact channel provider labels for person and organization channel tools.
list_person_channels
List contact channels for a person. Person accepts person ID, exact email address, or exact Huly display name; ambiguous names fail and should be retried with email or person ID.
add_person_channel
Idempotently add a contact channel to a person. Person accepts person ID, exact email address, or exact Huly display name. Provider labels match list_contact_channel_providers. Returns added=false and the existing channel when the exact provider+value already exists.
update_person_channel
Update one contact channel on a person. Person accepts person ID, exact email, or exact display name. Identify the channel with exactly one locator: channelId, or provider plus value. Provide newProvider, newValue, or both. Updating to an existing provider+value on the same person fails with a conflict.
remove_person_channel
Remove one contact channel from a person. Person accepts person ID, exact email, or exact display name. Identify the channel with exactly one locator: channelId, or provider plus value. Returns removed=false when the locator is absent for that person.
list_organizations
List all organizations in the Huly workspace. Returns organizations sorted by modification date (newest first).
create_organization
Create a new organization in Huly. Optionally add members by person ID or email. Fails if any requested member cannot be resolved. Returns the created organization ID.
get_organization
Retrieve full details for an organization by ID or exact name when that name is unique - including city, description, member count, and modification timestamp. If multiple organizations share the same name, use the organization ID.
update_organization
Update fields on an existing organization identified by ID or exact name when that name is unique. Only provided fields are modified. Description supports markdown for CRM notes / revenue summaries / context. 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. Pass null to clear city or description. If multiple organizations share the same name, use the organization ID.
delete_organization
Permanently delete an organization identified by ID or exact name when that name is unique. Use with care - this cannot be undone. Useful for cleaning up duplicate organizations after merging their data elsewhere. If multiple organizations share the same name, use the organization ID.
make_organization_customer
Apply the Customer mixin to an organization so it appears in the Huly Leads > Customers view. Idempotent - safe to call on organizations that are already customers. Takes the organization ID or exact name when that name is unique.
make_person_customer
Apply the native Customer mixin to one existing person so it appears in Huly Leads > Customers. Resolve by person ID, exact email address, or exact display name; ambiguous identifiers fail, no person is created, and repeated calls are idempotent.
add_organization_channel
Idempotently add a contact channel to an organization identified by ID or exact unique name. Provider labels: email, phone, linkedin, twitter, github, facebook, telegram, homepage, whatsapp, skype, profile, viber. Returns added=false and the existing channel when the exact provider+value already exists.
list_organization_channels
List contact channels for an organization identified by ID or exact unique organization name. Returns channelId, provider label, value, and optional activity metadata.
update_organization_channel
Update one contact channel on an organization identified by ID or exact unique name. Identify the channel with exactly one locator: channelId, or provider plus value. Provide newProvider, newValue, or both. Updating to an existing provider+value on the same organization fails with a conflict.
remove_organization_channel
Remove one contact channel from an organization identified by ID or exact unique name. Identify the channel with exactly one locator: channelId, or provider plus value. Returns removed=false when the locator is absent for that organization.
add_organization_member
Link a person as a member of an organization. The person appears under the org's Members tab in Huly. Use person ID or email to identify the person. Idempotent: returns added=false if that person is already a member.
list_organization_members
List all persons who are members of an organization. Returns each member's person ID, name, and primary email (if any). When using a name instead of an ID, that name must identify exactly one organization.
list_person_organizations
List all organizations that a person is a member of. Provide personId or email. Returns each organization's ID and name.
remove_organization_member
Unlink a person from an organization's members. Reverses add_organization_member. Returns removed: false if the person was not a member. When using an organization name instead of an ID, that name must identify exactly one organization.
merge_people
Preview or execute a native-reference-preserving person merge with an explicitly selected source and survivor; source and survivor must each contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous. Preview is the default and reports identities, channels, memberships, comments, attachments, every other model-declared Person/Contact/Employee reference, account eligibility, retained scalar fields, and an exact preflight token bound to canonical affected document IDs, write-routing fields, and scalar/array values. Execution requires execute=true plus that current token, rejects any snapshot drift before writing, rewires scalar and array references without dropping other array members, and invokes Huly's global Person merge when applicable. The source workspace Person record is retained because Huly's native merge does not cascade-delete it.
get_person_administration
Inspect one person's identity and profile administration surface; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous. Returns contact statuses, workspace membership, avatar metadata, birthday, social identities, account profile, channel activity, and an explicit stable-field support ledger.
list_social_identity_providers
List SocialIdentity providers installed in this Huly workspace, returning native provider IDs and types.
repair_person_social_identities
Apply only Huly's native safe, idempotent SocialIdentity repairs from the authenticated person's authoritative account record: recreate missing active projections, promote verification, reassign an unverified identity after an account merge, and propagate authoritative deletion; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous. Another account-linked person, verified cross-person reassignment, arbitrary active type/value/key changes, removal of workspace-only identities, and key collisions return a Huly-specific unsupported reason instead of being overwritten.
list_person_comments
List notes/comments genuinely attached to one person, oldest first; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous.
add_person_comment
Add a markdown note/comment to one person; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous. 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.
update_person_comment
Idempotently update a note/comment belonging to one resolved person; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous. 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.
delete_person_comment
Permanently delete a note/comment only when it belongs to one resolved person; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous.
list_person_attachments
List attachments genuinely attached to one person; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous.
add_person_attachment
Upload and attach a file to one person from exactly one of filePath, fileUrl, or base64 data; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous.
get_person_attachment
Get an attachment only when it belongs to one resolved person; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous.
update_person_attachment
Update description or pinned state only when the attachment belongs to one resolved person; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous.
delete_person_attachment
Permanently delete an attachment only when it belongs to one resolved person; person must contain exactly one exact locator: {id}, {email}, or {name}; duplicate email/name matches fail as ambiguous.
Channels
Tool
Description
list_chat_message_attachments
List files attached directly to a Huly chat message target. target.kind supports channel_message, dm_message, and thread_reply; the tool resolves channel names and one-to-one DM participant display names for you.
get_chat_message_attachment
Get one file attached directly to a Huly channel message, direct-message message, or thread reply. The attachmentId must belong to the resolved target.
add_chat_message_attachment
Attach a file directly to a Huly channel message, direct-message message, or thread reply. Provide filename, contentType, and exactly one source: filePath is resolved on the MCP server host, data is client-local base64 content, and fileUrl is fetched by the MCP server.
update_chat_message_attachment
Update description and/or pinned state for a file attached directly to a Huly channel message, direct-message message, or thread reply. The attachmentId must belong to the resolved target.
delete_chat_message_attachment
Delete one file attached directly to a Huly channel message, direct-message message, or thread reply. The attachmentId must belong to the resolved target.
list_channel_members
List members of a Huly channel by channel name or ID. Returns each member account UUID and the workspace display name when available.
add_channel_members
Idempotently add members to a non-archived Huly channel. Members accept account UUID, exact email, or exact person display name and resolve to Huly account UUIDs before replacing the full sorted member array.
remove_channel_members
Idempotently remove members from a non-archived Huly channel. Members accept account UUID, exact email, or exact person display name. Refuses removals that would leave the channel with zero members or, when owners exist, no owner among remaining members.
join_channel
Join a non-archived Huly channel as the authenticated account. Idempotent when the account is already a member.
leave_channel
Leave a non-archived Huly channel as the authenticated account. Idempotent when already absent. Refuses to leave if that would leave the channel empty or without any remaining owner.
archive_channel
Archive a Huly channel by channel name or ID. This is reversible with unarchive_channel and is idempotent when the channel is already archived.
unarchive_channel
Unarchive a Huly channel by channel name or ID. Idempotent when the channel is already active.
create_group_direct_message
Open a group direct-message conversation with at least two other workspace members. The people array accepts exact emails or exact display names; the authenticated account is included automatically. Idempotent by exact sorted member set: returns an existing group DM with created: false when one already exists. For one other person, use create_direct_message.
set_conversation_starred
Set the authenticated user's starred state for exactly one conversation. Provide either channel (channel name or ID) or dm (DM ID, or one-to-one participant display name), plus starred. Creates the missing notification context when needed.
set_conversation_closed
Set the authenticated user's closed/visible state for exactly one conversation. Provide either channel or dm, plus closed. Closing only hides the current user's notification context; it does not leave channels or remove members.
list_pinned_chat_messages
List pinned top-level messages and pinned thread replies in exactly one Huly channel or direct-message conversation. Provide channel (name or ID) or dm (DM ID or one-to-one participant name), not both. Results are newest-first across both message kinds.
set_chat_message_pinned
Idempotently pin or unpin a top-level message or thread reply located inside exactly one Huly channel or direct-message conversation. Provide channel or dm, plus the messageId; the message must belong to the resolved conversation.
request_channel_access
Attempt the Huly private-channel request-access workflow by channel name or ID. The current Chunter SDK/model has no stable request-access record or server action, so this build returns supported=false with a stable reasonCode and performs no mutation.
translate_chat_message
Attempt to translate a located Huly channel/DM message to targetLanguage. Current Huly translation is browser-only, uses an optional AI endpoint, and stores results only in UI state; this build returns supported=false with a stable reasonCode and does not fabricate translated text.
list_channels
List all Huly channels. Returns channels sorted by name. Supports filtering by archived status. Supports searching by name substring (nameSearch) and topic substring (topicSearch).
get_channel
Retrieve full details for a Huly channel including topic and member list.
create_channel
Create a new channel in Huly. Returns the created channel ID and name.
update_channel
Update fields on an existing Huly channel. Only provided fields are modified.
delete_channel
Permanently delete a Huly channel. This action cannot be undone. For reversible channel lifecycle changes, use archive_channel and unarchive_channel instead.
list_channel_messages
List messages in a Huly channel. Returns messages sorted by date (newest first).
list_external_channel_messages
Read persisted Telegram contact-channel messages or assess why an external provider cannot be read safely. For provider=telegram, resolve channel by exact stored value or stable contact-channel ID and return newest contentMarkdown, direction, stored Huly sendOn timestamp, and attachment count; returns supported=false when the workspace model or channel is unavailable. Inbound attachment creation is asynchronous, so attachmentCount can temporarily lag the message; attachment bytes are not returned. This proves only Huly-stored records, not provider freshness, an active Telegram connection, or provider delivery/read status. Gmail returns supported=false because Huly does not expose the live deployment-wide v1/v2 writer version needed to distinguish current legacy records from stale data. The limit defaults to 50 and is capped at 200. This tool never sends, replies, deletes, or mutates.
send_channel_message
Send a message to a Huly channel. Message body supports markdown formatting. 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.
update_channel_message
Update a channel message. Only the body can be modified; body supports markdown formatting. 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.
delete_channel_message
Permanently delete a channel message. This action cannot be undone.
list_direct_messages
List direct message conversations in Huly. Returns conversations sorted by date (newest first).
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.
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.
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. 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.
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; body supports markdown formatting. 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.
delete_dm_message
Permanently delete 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. This action cannot be undone.
list_thread_replies
List replies in a message thread. Returns replies sorted by date (oldest first).
add_thread_reply
Add a reply to a message thread. Reply body supports markdown formatting. 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.
update_thread_reply
Update a thread reply. Only the body can be modified; body supports markdown formatting. 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.
delete_thread_reply
Permanently delete a thread reply. This action cannot be undone.
Calendar
Tool
Description
list_events
List calendar events sorted by date, with meetingRoom identity when an Event has the native Meeting composition. Supports filtering by date range.
list_calendars
List writable, non-hidden calendars that can be used as create_event or create_recurring_event targets. Use this before creating events when you need to choose a target calendarId explicitly.
list_calendar_settings
List the authenticated caller's Calendar settings, including caller-owned hidden and read-only calendars. Returns each calendar's stable ID, name, kind, hidden state, visibility, access, and computed primary state. Provider identifiers and defaults are omitted. Use list_calendars for writable, non-hidden event targets.
set_primary_calendar
Set the authenticated caller's primary personal calendar by calendarId or an unambiguous exact calendarName. The target must be caller-owned, visible, and Writer or Owner. Creates or updates the single PrimaryCalendar preference and never changes provider defaults.
update_calendar_settings
Update local visibility and/or hidden settings on one authenticated caller-owned calendar. Visibility accepts public, freeBusy, or private. Hidden changes are allowed only for ExternalCalendar rows and require Writer or Owner access; internal-calendar hiding and provider-owned fields are rejected.
get_event
Retrieve full details for a calendar event, including description and meetingRoom identity when it has the native Meeting composition.
create_event
Create a new calendar event. Description supports markdown formatting. 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. Optional calendarId targets a specific calendar; when omitted, the event uses the authenticated user's primary personal calendar. Optional meetingRoom.room resolves an ID first, then an exact unambiguous name; meetingRoom.floor disambiguates names only. It creates the native Meeting assignment for every eventId sibling without replacing location. Returns the created event ID.
update_event
Update fields on an existing calendar event. Only provided fields are modified. Description updates support 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. meetingRoom changes an existing native Meeting only (ordinary Events are rejected), resolves room ID first then exact name with optional floor disambiguation, and updates every eventId sibling without replacing location. Room removal is not supported.
delete_event
Permanently delete a calendar event. This action cannot be undone.
list_schedules
List calendar scheduling links/availability schedules. Optional owner accepts an employee/person ID, exact name, or email.
get_schedule
Retrieve one calendar schedule including owner, availability, calendar target, time zone, and room information when it is a meeting schedule.
create_schedule
Create a calendar schedule. Owner accepts an employee/person ID, exact name, or email; calendar can be targeted by calendarId or calendarName. Optional meetingRoom.room resolves an ID first, then an exact unambiguous name; meetingRoom.floor disambiguates names only and creates the native MeetingSchedule composition. Meeting-room schedules must be owned by the authenticated caller.
update_schedule
Update a calendar schedule. Supports owner, title, description, duration, interval, availability, timeZone, and calendar move by calendarId or calendarName. meetingRoom changes an existing caller-owned native MeetingSchedule only, using ID-first then exact-name resolution with optional floor disambiguation; room removal is not supported.
delete_schedule
Delete a calendar schedule by scheduleId.
list_recurring_events
List recurring event definitions. Returns recurring events sorted by modification date (newest first).
create_recurring_event
Create a new recurring calendar event with RFC5545 RRULE rules. 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. Optional calendarId targets a specific calendar; when omitted, the event uses the authenticated user's primary personal calendar. Returns the created event ID.
list_event_instances
List instances of a recurring event. Returns instances sorted by date. Supports filtering by date range. Use includeParticipants=true to fetch full participant info (extra lookups).
Time Tracking
Tool
Description
log_time
Log time spent on a Huly issue. Records a time entry with optional description. Values are hours (Huly native unit): 0.25 = 15 minutes; 8 = one work day.
get_time_report
Get time tracking report for a specific Huly issue. Shows total time, estimation, remaining time, and all time entries. Values are hours (Huly native unit): 0.25 = 15 minutes; 8 = one work day.
list_time_spend_reports
List all time entries across issues. Supports filtering by project and date range. Returns entries sorted by date (newest first). Values are hours (Huly native unit): 0.25 = 15 minutes; 8 = one work day.
get_detailed_time_report
Get detailed time breakdown for a project. Shows total time grouped by issue and by employee. Supports date range filtering. Values are hours (Huly native unit): 0.25 = 15 minutes; 8 = one work day.
list_work_slots
List scheduled work slots created by schedule_todo, Huly UI, or other clients. Shows planned time blocks attached to ToDos. Supports filtering by employee and date range.
start_timer
Start a client-side timer on a Huly issue. Validates the issue exists and returns a start timestamp. Use log_time to record the elapsed time when done.
stop_timer
Stop a client-side timer on a Huly issue. Returns the stop timestamp. Calculate elapsed time from start/stop timestamps and use log_time to record it.
Search
Tool
Description
fulltext_search
Perform a global fulltext search across all Huly content. Searches issues, documents, messages, and other indexed content. Returns matching items sorted by relevance (newest first).
Associations
Tool
Description
list_associations
List Huly association definitions: class-level typed links that define which document classes may be related. Use this before create_relation to discover association IDs, source/target classes, and whether relation writes are supported.
create_association
Idempotently create one Huly association definition between two non-system classes. Use sourceClass/targetClass with sourceRole/targetRole and cardinality; returns an existing identical association by default.
delete_association
Idempotently delete one Huly association definition only when no concrete relations reference it. If relations exist, delete_relation must clean them up first; deleting an already-missing association is a successful no-op.
list_relations
List concrete Huly relation instances under an association, optionally filtered by source and target documents. Endpoint locators support raw, issue, document, card, and exact funnel-scoped lead targets. Requires at least one filter to avoid broad workspace scans.
create_relation
Idempotently create one concrete relation between two resolved documents for a writable association. Endpoint locators support raw, issue, document, card, and exact funnel-scoped lead targets. Enforces association endpoint classes, direction, duplicate handling, automation-only restrictions, and cardinality. Published Relation endpoints have no mutable field; replace a relation with delete_relation then create_relation.
delete_relation
Idempotently delete one concrete relation by relation ID or by exact association/source/target triple. Triple endpoint locators support raw, issue, document, card, and exact funnel-scoped lead targets. Triple deletes use the same direction semantics as create_relation and fail if the selector is ambiguous.
Activity
Tool
Description
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). Legitimately absent or null optional actor, message, class, and metadata fields are omitted from each item.
get_activity_message
Get a single activity message by ID, including subclass metadata when available.
pin_activity_message
Pin or unpin an activity message. Idempotent when the pin state already matches.
list_activity_filters
List configured activity filters in display order.
list_activity_references
List activity references connected to a raw Huly object. Use direction to list references from the object, to the object, or both.
list_activity_replies
List thread replies on any activity message, not only channel messages.
add_activity_reply
Add a Markdown reply to any activity message. 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.
update_activity_reply
Update a generic activity reply body. Body 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.
delete_activity_reply
Delete a generic activity reply.
add_reaction
Add an emoji reaction to an activity message.
remove_reaction
Remove an emoji reaction from an activity message.
list_reactions
List reactions on an activity message.
save_message
Save/bookmark an activity message for later reference.
unsave_message
Remove an activity message from saved/bookmarks.
list_saved_messages
List saved/bookmarked activity messages.
list_mentions
List @mentions of the current user in activity messages.
Notifications
Tool
Description
list_notification_providers
List model-declared notification providers such as inbox, push, and sound. Use returned provider IDs for setting updates. Older REST servers may return compatibility metadata with an explicit tool warning.
list_notification_types
List model-declared notification types. Use returned type IDs for provider-specific setting updates. Older REST servers may return compatibility metadata with an explicit tool warning.
list_notifications
List inbox notifications. Returns notifications sorted by modification date (newest first). Supports filtering by read/archived status.
get_notification
Retrieve full details for a notification. Use this to view notification content and metadata.
mark_notification_read
Mark a notification as read. Idempotent: returns success when the notification is already read.
mark_notification_unread
Mark a notification as unread. Idempotent: returns success when the notification is already unread.
mark_all_notifications_read
Mark all unread notifications as read. Returns the count of notifications marked.
archive_notification
Archive a notification. Archived notifications are hidden from the main inbox view. Idempotent when already archived.
unarchive_notification
Unarchive a notification so it can appear in active notification lists again. Idempotent when already active.
archive_all_notifications
Archive all notifications. Returns the count of notifications archived.
delete_notification
Permanently delete a notification. This action cannot be undone.
get_notification_context
Get notification context for an entity. Returns tracking information for a specific object.
list_notification_contexts
List notification contexts. Returns contexts sorted by last update timestamp (newest first). Supports filtering by pinned status and can include hidden contexts.
pin_notification_context
Pin or unpin a notification context. Pinned contexts are highlighted in the inbox. Idempotent when the pin state already matches.
hide_notification_context
Hide or unhide a notification context. Hidden contexts are omitted from list_notification_contexts unless includeHidden is true. Idempotent when the hidden state already matches.
archive_notification_context
Archive all inbox notifications in a notification context. Idempotent: returns count 0 when no active notifications remain.
unarchive_notification_context
Unarchive all archived inbox notifications in a notification context. Idempotent: returns count 0 when no archived notifications remain.
subscribe_to_object_notifications
Subscribe the authenticated account to notifications for a raw Huly object by adding a core collaborator row. Idempotent when already subscribed.
unsubscribe_from_object_notifications
Unsubscribe the authenticated account from notifications for a raw Huly object by removing its collaborator row. Idempotent when already absent.
list_notification_settings
List notification provider settings. Returns current notification preferences.
update_notification_provider_setting
Enable or disable a notification provider setting. Validates providerId against authoritative model definitions when available; compatible REST fallback is preserved and explicitly warned.
update_notification_type_setting
Enable or disable one notification type for one provider. Validates both IDs against authoritative model definitions when available, and creates a type setting only when the provider is configurable. Compatible REST fallback is preserved and explicitly warned.
get_unread_notification_count
Get the count of unread notifications.
Workspace
Tool
Description
list_workspace_members
List members in the current Huly workspace with their roles. Returns members with account IDs and roles.
Get information about the current workspace including name, URL, region, and settings.
list_workspaces
List all workspaces accessible to the current user. Returns workspace summaries sorted by last visit.
create_workspace
Create a new Huly workspace. Returns the workspace UUID and URL. Optionally specify a region.
delete_workspace
Permanently delete the current workspace. This action cannot be undone. Use with extreme caution.
get_user_profile
Get the current user's profile information including bio, location, and social links.
update_user_profile
Update the current user's profile. Supports bio, city, country, website, social links, and public visibility.
update_guest_settings
Update workspace guest settings. Control read-only guest access and guest sign-up permissions.
create_access_link
Create a Huly workspace access link. When role is omitted, role=GUEST. Supports anonymous reusable guest links by setting personalized=false with notBefore and expiration, and can restrict access to specific Huly space IDs via spaces.
get_regions
Get available regions for workspace creation. Returns region codes and display names.
Approvals
Tool
Description
list_approval_requests
List generic Huly approval Request documents from the published @hcengineering/request SDK package. This is read-only discovery: filter by status, raw attachedTo document id, and/or raw attachedToClass class id when you know the target document. Omit filters to inspect recent approval requests across modules.
get_approval_request
Read one generic Huly approval Request document by raw request _id. Returns person refs with best-effort contact metadata plus the opaque SDK tx/rejectedTx payloads for inspection; approval mutations are intentionally not exposed by this read-only tool.
add_approval_request
Create a generic Huly approval Request attached to any target document. Provide raw attachedTo and attachedToClass from the target, requested people as Person ids or exact email/name identifiers, and a real opaque Huly SDK tx payload. Omit space to resolve it from the target; collection defaults to requests. Returns the new request id without doing an immediate stale-prone read-after-write.
add_approval_request_comment
Add a plain markdown comment to an approval Request by request _id. 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. This does not approve, reject, cancel, or create a decision comment mixin.
approve_approval_request
Approve an active approval Request as the current Huly user. The current user's Employee/Person ref must be in the request's requested list. Optionally attach a markdown decision comment before approval. 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. If the current user already approved it, returns changed=false.
reject_approval_request
Reject an active approval Request as the current Huly user and attach the required markdown rejection decision comment. 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. Huly applies rejectedTx when present.
cancel_approval_request
Cancel an active approval Request created by the current Huly user. This is the safe removal-from-workflow operation; hard delete is intentionally not exposed.
Boards
Tool
Description
list_boards
List Huly boards from @hcengineering/board, sorted by name. Boards are task.Project-backed spaces; this is not the separate Huly Card module.
get_board
Get one Huly board by board _id or exact board name. Returns board metadata, project type, and card count.
create_board
Create a Huly board. Idempotent by exact active board name; pass projectType by _id or exact name only when the default board project type is ambiguous.
update_board
Update a Huly board's name, description, or privacy. board accepts board _id or exact board name.
archive_board
Archive a Huly board by board _id or exact board name. This hides the board but does not delete cards.
unarchive_board
Unarchive a Huly board by board _id or exact board name.
list_board_cards
List cards on one @hcengineering/board board. board accepts board _id or exact board name; cards are sorted newest modified first.
get_board_card
Get one board card. board accepts board _id or exact board name; card accepts card _id, CARD-123, bare number 123, or exact title scoped to the board.
create_board_card
Create a board card with safe defaults. Resolves kind/status from the board project type, increments the CARD-number sequence, and stores markdown description as inline Huly Markup. 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.
update_board_card
Update board card fields: title, markdown description, status, assignee, members, location, cover, startDate, and dueDate. 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. Use null to clear clearable fields.
archive_board_card
Archive a board card. card accepts _id, CARD-123, bare number, or exact title scoped to the board.
unarchive_board_card
Unarchive a board card. card accepts _id, CARD-123, bare number, or exact title scoped to the board.
delete_board_card
Permanently delete an already archived board card using Huly removeCollection. Active cards are rejected; call archive_board_card first.
list_board_labels
List board label definitions. Board labels are @hcengineering/tags TagElement rows for board cards, with targetClass = @hcengineering/board Card.
create_board_label
Create a board label definition for board cards. Idempotent by exact title when one label matches; uses board.category.Other when no default category exists.
update_board_label
Update a board label definition by TagElement _id or exact title. At least one of title, color, description, or category is required.
delete_board_label
Delete one board label definition by TagElement _id or exact title. This removes the label definition, not a board card.
list_board_card_labels
List board labels attached to one board card. Resolves board by _id/name and card by _id, CARD-123, bare number, or exact title.
add_board_card_label
Attach a board label to a board card. If label is a new title, creates the board-card label definition first; repeated calls are idempotent.
remove_board_card_label
Detach a board label from one board card. Returns detached=false when the label exists but is not attached to that card.
list_board_menu_pages
Read-only list of board menu page model docs. Optional page filters by MenuPage _id, raw pageId, main/archive alias, or exact label.
list_board_saved_views
Read-only list of board saved filtered views. Queries view.class.FilteredView where attachedTo = board.app.Board and reports own/shared visibility.
get_board_saved_view
Read one board saved filtered view by FilteredView _id or exact name, scoped to attachedTo = board.app.Board. No saved-view writes are performed.
list_board_viewlets
Read-only list of board card viewlets. Queries view.class.Viewlet with attachTo = board.class.Card and includes descriptor metadata plus matching ViewletPreference configs.
get_board_common_preference
Read the CommonBoardPreference row attached to board.app.Board. Returns present=false when the preference row is absent and never creates it.
Cards
Tool
Description
list_card_comments
List comments genuinely attached to one Huly card, oldest first. Resolves cardSpace by exact name or ID and card by exact title or ID. Includes comments created by this MCP server and compatible Huly UI card-comment conventions.
add_card_comment
Add a markdown comment to one Huly card, resolving the card space by exact name or ID and the card by exact title or ID. 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.
update_card_comment
Update one comment that belongs to the resolved Huly card. Resolves the card space by exact name or ID and the card by exact title or ID. 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.
delete_card_comment
Permanently delete one comment that belongs to the resolved Huly card. Resolves the card space by exact name or ID and the card by exact title or ID. This action cannot be undone.
list_card_spaces
List all Huly card spaces. Returns card spaces sorted by name. Card spaces are containers for cards.
list_master_tags
List master tags (card types) available in a Huly card space. Master tags define the type/schema of cards that can be created in a space.
list_cards
List cards in a Huly card space. Returns cards sorted by modification date (newest first). Supports filtering by type (master tag), title substring, and content search.
get_card
Retrieve full details for a Huly card including markdown content. When Huly supplies a coherent version number and chain identity, returns them together in one version object; partial or null version fields are omitted.
list_card_versions
Read one page of a Huly card's version history using any version card ID or exact title. Returns deterministic oldest-version-first entries, an authoritative total for the full history, and hasMore when the limit truncates the page. Unversioned cards return one entry without version metadata. This tool never creates or restores versions.
create_card
Create a new card in a Huly card space. Requires a master tag (card type). Content supports markdown formatting. 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 card id.
update_card
Update fields on an existing Huly card. Only provided fields are modified. Content updates support 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.
delete_card
Permanently delete a Huly card. This action cannot be undone.
Collaborators
Tool
Description
list_object_collaborators
List notification collaborators on a Huly issue, document, or raw object. Prefer friendly targets: project+issueIdentifier for issues or teamspace+document for documents. Advanced callers may pass objectId+objectClass directly.
add_object_collaborator
Subscribe a workspace member to object notifications by adding a core collaborator row. Member can be an account UUID, exact employee/person name, or email. Idempotent when already subscribed.
remove_object_collaborator
Unsubscribe a workspace member from object notifications by removing its collaborator row. Member can be an account UUID, exact employee/person name, or email. Idempotent when already absent.
Custom-Fields
Tool
Description
list_custom_fields
List custom field definitions in the workspace. Returns fields with their labels, types, and owner class info. Custom fields are created in the Huly UI on Card types, Issue types, or other classes. Use targetClass to filter fields for a specific class.
get_custom_field_values
Read custom field values from a document. Pass the document's ID and class (from list_cards, list_issues, etc.). Returns all custom field values found on the document with their labels and types.
set_custom_field
Set a custom field value on a document. Requires the document ID, class, field ID (from list_custom_fields), and value. Values are parsed before Huly writes: numbers from numeric strings, booleans from 'true'/'false', and strings as-is. Date fields accept only a real YYYY-MM-DD calendar date (UTC midnight) or a canonical non-negative epoch-millisecond string from 0 through 8640000000000000. If a date is rejected, remove any time, time-zone suffix, sign, whitespace, decimal, or exponent and retry with one of those exact forms.
Drive
Tool
Description
list_drives
List Huly Drive spaces. When includeArchived is omitted, includeArchived=undefined. Use this before path operations when you do not know the exact drive id or exact drive name.
get_drive
Get one Huly Drive by exact drive id or exact drive name. If an exact name is ambiguous, the error includes candidate ids so the next call can use the id.
create_drive
Idempotently create a Huly Drive space. If an active Drive with the same exact name already exists, returns it with created=false. Initial members and owners accept account UUIDs, exact emails, or exact person names; omitted lists default to the caller.
update_drive
Update safe metadata on an existing Drive: name, description, private, archived, or autoJoin. Provide at least one update field. This changes the Drive space, not files or folders inside it.
delete_drive
Permanently delete an empty Huly Drive space. The Drive must contain no files or folders; non-empty Drives fail with child count and item summaries. This is permanent deletion, not archive or trash.
add_drive_members
Idempotently add members to an existing Drive. Members accept account UUIDs, exact emails, or exact person names and resolve to Huly account UUIDs before replacing the Drive member list.
remove_drive_members
Idempotently remove members from an existing Drive. Members accept account UUIDs, exact emails, or exact person names and resolve to Huly account UUIDs before replacing the Drive member list.
set_drive_owners
Replace owners on an existing Drive. Owners accept account UUIDs, exact emails, or exact person names. By default, each owner is also ensured as a Drive member. Pass owners=[] to clear owners.
list_drive_items
List children under a folder path in a Drive. Paths are POSIX-like and normalized to absolute; '/' lists the root. Duplicate same-parent titles fail with candidate ids instead of guessing.
get_drive_item
Get one Drive folder or file by either exact itemId or path. Provide only one locator. File results include current version, size, MIME type, and download URL when available.
list_drive_file_comments
List comments on a Drive file resolved by filePath or fileId. Provide only one locator. Returns comments sorted by creation date, oldest first.
add_drive_file_comment
Add a Markdown comment to a Drive file resolved by filePath or fileId. Provide only one locator. The comment is attached directly to the file. 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.
update_drive_file_comment
Update a comment on a Drive file resolved by filePath or fileId. Provide only one locator. Idempotent when the comment body is unchanged. 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.
delete_drive_file_comment
Permanently delete a comment from a Drive file resolved by filePath or fileId. Provide only one locator. This deletes the comment, not the file.
list_drive_file_activity
List activity messages for a Drive file resolved by filePath or fileId. Provide only one locator. Returns activity sorted by date, newest first.
create_drive_folder
Idempotently create a Drive folder path, creating missing parents like mkdir -p. Returns created=false when the full folder path already exists.
upload_drive_file
Upload a file into Drive at a full path including filename. Provide exactly one source: filePath is resolved on the MCP server host, data is client-local base64 content, and fileUrl is fetched by the MCP server. By default createParents=true creates missing parent folders and reports them.
upload_drive_file_version
Upload a new version for an existing Drive file resolved by file id or file path. Provide exactly one source: filePath is resolved on the MCP server host, data is client-local base64 content, and fileUrl is fetched by the MCP server. This increments the file version counter and makes the uploaded version current.
move_drive_item
Move a Drive item, meaning a file or folder, to another existing folder path in the same Drive without renaming it. Idempotent when the item is already in that folder. Rejects sibling title collisions and rejects moving a folder into itself or a descendant.
rename_drive_item
Rename a Drive item, meaning a file or folder, in its current folder. Idempotent when the title is unchanged. Rejects sibling title collisions; use move_drive_item to change folders.
delete_drive_item
Permanently delete a Drive item, meaning a file or folder. Files are deleted with their version records. Folders must be empty; non-empty folders fail with child count and child summaries. This is permanent deletion, not archive or trash.
list_drive_file_versions
List versions for a Drive file resolved by file id or file path. Marks the current version and includes blob id, size, MIME type, lastModified, and download URL.
restore_drive_file_version
Restore an existing Drive file version by version id or numeric version. Idempotent when the requested version is already current and does not increment the file version counter.
Hr
Tool
Description
list_departments
List HR departments with exact full paths, hierarchy, managers, subscribers, team lead, direct Staff assignments, server-derived member count, and stable counters. Scope by exact parent path/ID; recursive=false returns direct children.
get_department
Get one HR department by exact full slash-separated path or department ID.
create_department
Create a top-level or nested HR department. Parent and people use exact paths/IDs/names/emails and reject ambiguity. Names cannot contain '/'. Department.members starts empty and remains server-derived.
update_department
Rename, move, or replace department metadata and people. Rejects duplicate sibling names, parent cycles, and moves of subtrees with server-derived members; clear Staff.department assignments before moving a populated subtree. newParent=null moves top-level; teamLead=null clears. Never writes Department.members.
delete_department
Preview destructive impact by default. Execution requires execute=true plus exact previewed descendant and assigned-Staff counts; Huly then cascades descendant deletion and clears affected Staff assignments.
list_staff
List HR Staff and authoritative department assignments. Optionally scope by exact department path/ID, include descendants, and filter Employee active state.
assign_staff_department
Assign an exact employee ID/email/display name by writing only authoritative Staff.department. Use department=null to clear. Department.members hierarchy propagation is performed asynchronously by Huly's server trigger.
list_hr_request_comments
List comments directly attached to an exact HR request ID, with total and truncation metadata.
add_hr_request_comment
Add a Markdown comment directly to an exact HR request ID.
update_hr_request_comment
Update a comment that belongs directly to an exact HR request.
delete_hr_request_comment
Delete a comment that belongs directly to an exact HR request.
list_hr_request_attachments
List files directly attached to an exact HR request ID, with total and truncation metadata.
get_hr_request_attachment
Get one file belonging directly to an exact HR request.
add_hr_request_attachment
Attach a file to an exact HR request. Provide filename, contentType, and exactly one of filePath, fileUrl, or base64 data.
update_hr_request_attachment
Update description and/or pinned state for a file belonging directly to an exact HR request.
delete_hr_request_attachment
Delete one file belonging directly to an exact HR request.
list_hr_request_types
Discover installed HR request types by stable ID and Huly-translated human label. Set locale to a supported Huly locale such as fr; labels from any supported locale may be used by request tools, while ambiguous labels are rejected. Request-type mutation is intentionally unsupported because Huly installs these as model-space documents and exposes no stable runtime mutation contract.
list_hr_requests
List HR requests with exact optional employee, department, and request-type filters. Calendar dates are inclusive YYYY-MM-DD values stored with UTC offset 0. Every match is loaded from Huly before the intentional output page is applied; results include total, truncation, and nextOffset continuation metadata.
get_hr_request
Get one HR request by the exact raw request ID returned by list_hr_requests.
create_hr_request
Create an employee-attached HR request using exact employee, department, and request-type resolution. Dates are inclusive calendar dates in YYYY-MM-DD form and descriptions accept Markdown with native Huly references.
update_hr_request
Update selected HR request fields by exact request ID. Department and type locators resolve exactly; omitted fields are preserved. Dates remain inclusive YYYY-MM-DD calendar dates.
delete_hr_request
Delete one exact HR request. Its comments and attachments are Huly-owned attached collections and follow the request deletion lifecycle.
list_public_holidays
List public-holiday documents with exact optional department and inclusive date filters. includeInherited adds every ancestor department explicitly; it never adds descendants. Results are loaded completely from Huly before the intentional output page is applied, and include total, truncated, and nextOffset metadata.
get_public_holiday
Get one public-holiday document by the exact raw ID returned by list_public_holidays.
create_public_holiday
Create one public holiday for an exact department ID or full path. The date is a timezone-independent Gregorian calendar day stored as Huly TzDate with UTC offset 0; duplicate department/date pairs are rejected.
update_public_holiday
Update selected fields of one exact public-holiday ID. Department paths resolve exactly and duplicate depar
Reachable self-hosted or replacement hosted Huly API URL
HULY_EMAILrequired
Your Huly account email
HULY_PASSWORDrequiredsecret
Your Huly account password
HULY_WORKSPACErequired
Huly workspace identifier
HULY_CONNECTION_TIMEOUT
Connection timeout in milliseconds. Omit to use the package default.
HULY_TOOL_MODE
Tool exposure mode: auto (default), native, or proxy. Auto keeps exact claude-code native and resolves Codex, Cursor, Windsurf, Copilot, opencode, Claude AI, and unknown clients to proxy mode.
PROXY_OUTPUT_STRICT
Set true to make active TOOLSETS / TOOLS a hard allow-list for proxy search, schema lookup, and invocation. Defaults to false.
TOOLSETS
Comma-separated native Huly tool categories to expose, such as issues,projects,search. If unset with TOOLS, all native tools are exposed.
TOOLS
Comma-separated exact native Huly tool names to expose in addition to selected TOOLSETS, such as list_documents,create_issue.