Labsco
dearlordylord logo

Huly

40

from dearlordylord

MCP server for Huly project management system

🔥🔥🔥✓ VerifiedAccount requiredNeeds API keys

Huly MCP

npm downloads

Glama score MCP Server

Huly MCP is a feature-complete MCP server for Huly integration. Published on npm as @firfi/huly-mcp.

Tool Exposure Defaults

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.

Codex

Use Codex's MCP manager:

codex mcp add huly \
  --env HULY_URL=https://huly.app \
  --env HULY_EMAIL=your@email.com \
  --env HULY_PASSWORD=yourpassword \
  --env HULY_WORKSPACE=yourworkspace \
  -- npx -y @firfi/huly-mcp@latest

Or add it directly to ~/.codex/config.toml:

[mcp_servers.huly]
command = "npx"
args = ["-y", "@firfi/huly-mcp@latest"]

[mcp_servers.huly.env]
HULY_URL = "https://huly.app"
HULY_EMAIL = "your@email.com"
HULY_PASSWORD = "yourpassword"
HULY_WORKSPACE = "yourworkspace"
Claude Code
claude mcp add huly \
  -e HULY_URL=https://huly.app \
  -e HULY_EMAIL=your@email.com \
  -e HULY_PASSWORD=yourpassword \
  -e HULY_WORKSPACE=yourworkspace \
  -- npx -y @firfi/huly-mcp@latest

Or add to ~/.claude.json using the standard config above.

Claude Desktop

Add the standard config to your claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
VS Code

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.

{
  "servers": {
    "huly": {
      "command": "npx",
      "args": ["-y", "@firfi/huly-mcp@latest"],
      "env": {
        "HULY_URL": "https://huly.app",
        "HULY_EMAIL": "your@email.com",
        "HULY_PASSWORD": "yourpassword",
        "HULY_WORKSPACE": "yourworkspace"
      }
    }
  }
}
Cursor

Add the standard config to ~/.cursor/mcp.json, or via Settings → Tools & Integrations → New MCP Server.

Windsurf

Add the standard config to your Windsurf MCP configuration file.

OpenCode

Open the global configuration file (~/.config/opencode/opencode.json) and merge this entry into your config:

{
  "mcp": {
    "huly": {
      "type": "local",
      "command": ["npx", "-y", "@firfi/huly-mcp@latest"],
      "environment": {
        "HULY_URL": "https://huly.app",
        "HULY_EMAIL": "your@email.com",
        "HULY_PASSWORD": "yourpassword",
        "HULY_WORKSPACE": "yourworkspace"
      }
    }
  }
}

HTTP Transport

By default, the server uses stdio transport. For HTTP transport (Streamable HTTP):

HULY_URL=https://huly.app \
HULY_EMAIL=your@email.com \
HULY_PASSWORD=yourpassword \
HULY_WORKSPACE=yourworkspace \
MCP_TRANSPORT=http \
npx -y @firfi/huly-mcp@latest

Server listens on http://127.0.0.1:3000/mcp by default.

Configure with MCP_HTTP_PORT and MCP_HTTP_HOST:

MCP_TRANSPORT=http MCP_HTTP_PORT=8080 MCP_HTTP_HOST=0.0.0.0 npx -y @firfi/huly-mcp@latest

HTTP MCP Protocol Support

The HTTP server supports both the existing SDK initialize-compatible Streamable HTTP flow and the 2026 stateless HTTP flow at the same /mcp endpoint. Dispatch is per request:

  • Requests with MCP-Protocol-Version: 2026-07-28, matching _meta.io.modelcontextprotocol/protocolVersion, or server/discover use the 2026 stateless dispatcher.
  • Requests without 2026 protocol signals continue through the SDK transport for compatibility with existing clients.

The 2026 path requires one JSON-RPC message per POST, Accept: application/json, text/event-stream, Mcp-Method, method-specific Mcp-Name, and per-request _meta.io.modelcontextprotocol/* client metadata. Huly credentials are still 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_TRANSPORT=http \
MCP_AUTH_TOKEN="$(openssl rand -hex 32)" \
npx -y @firfi/huly-mcp@latest

HTTP clients must then send:

Authorization: Bearer <MCP_AUTH_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:

HeaderRequiredDescription
x-huly-urlYesHuly instance URL
x-huly-workspaceYesWorkspace identifier
x-huly-tokenYesHuly API token
x-huly-connection-timeoutNoConnection timeout in ms

If any x-huly-* header is present, all required headers must be present. Missing values are not filled from environment variables. Email/password auth is not supported in hosted header configuration v1.

For a Smithery publish schema example, see docs/SMITHERY_URL_PUBLISH.md.

Environment Variables

VariableRequiredDescription
HULY_URLYesHuly instance URL
HULY_EMAILAuth*Account email
HULY_PASSWORDAuth*Account password
HULY_TOKENAuth*API token (alternative to email/password)
HULY_WORKSPACEYesWorkspace identifier
HULY_CONNECTION_TIMEOUTNoConnection timeout in ms. Omit to use the package default.
MCP_TRANSPORTNoTransport type: stdio (default) or http
MCP_HTTP_PORTNoHTTP server port (falls back to PORT, then 3000)
MCP_HTTP_HOSTNoHTTP server host. Omit to bind to the package default loopback host.
MCP_AUTH_TOKENNoOptional bearer token required by HTTP clients for /mcp. This protects the MCP endpoint only; it is not a Huly API token.
HULY_TOOL_MODENoTool 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_STRICTNoProxy candidate strictness: false (default) keeps proxy discovery broad; true makes active TOOLSETS / TOOLS a hard allow-list for proxy search, schema lookup, and invocation.
TOOLSETSNoComma-separated tool categories to expose. If neither TOOLSETS nor TOOLS is set, all native Huly tools are exposed. Example: issues,projects,search
TOOLSNoComma-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.

TemplateNameDescriptionMIME Type
huly://projects/{project}huly-projectRead full details for a Huly tracker project by project identifier, for example huly://projects/HULY.application/json
huly://issues/{issue}huly-issueRead 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-issueRead 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

ToolDescription
list_tool_categoriesLists 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_toolsSearches 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_schemaReturns 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_toolInvokes 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.

TOOLSETS categories: projects, issues, comments, milestones, documents, storage, attachments, contacts, channels, calendar, time tracking, search, associations, activity, notifications, workspace, approvals, boards, cards, collaborators, custom-fields, drive, inventory, labels, leads, templates, planner, preferences, processes, recruiting, sdk-discovery, spaces, tag-categories, tags, task-management, test-management, user-statuses, views, virtual-office

Projects

ToolDescription
list_project_target_preferencesList 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_preferenceCreate 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_projectsList all Huly projects. Returns projects sorted by name. Supports filtering by archived status.
get_projectGet full details of a Huly project including its statuses. Returns project name, description, archived flag, default status, and all available statuses.
list_statusesList 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_projectCreate 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_projectUpdate a Huly project. Only provided fields are modified. Set description to null to clear it.
delete_projectPermanently delete a Huly project. All issues, milestones, and components in this project will be orphaned. This action cannot be undone.

Issues

ToolDescription
preview_deletionPreview 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_componentsList components in a Huly project. Components organize issues by area/feature. Returns components sorted by modification date (newest first).
get_componentRetrieve full details for a Huly component. Use this to view component content and metadata.
create_componentCreate 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_componentUpdate 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_componentSet or clear the component on a Huly issue. Pass null for component to clear it.
delete_componentPermanently delete a Huly component. This action cannot be undone.
list_issuesQuery 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, component, and parentIssue (to list children of a specific issue). Supports searching by title substring (titleSearch) and description content (descriptionSearch).
get_issueRetrieve full details for a Huly issue including markdown description. Use this to view issue content, comments, or full metadata.
create_issueCreate a new issue in a Huly project. 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. Optionally create as a sub-issue by specifying parentIssue. 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_issueUpdate fields on an existing Huly issue. 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_labelAdd a tag/label to a Huly issue. Creates the tag if it doesn't exist in the project.
remove_issue_labelRemove a tag/label from a Huly issue. Detaches the label reference; does not delete the label definition.
delete_issuePermanently delete a Huly issue. This action cannot be undone.
move_issueMove an issue to a new parent (making it a sub-issue) or to top-level (null). Updates parent/child relationships and sub-issue counts.
list_issue_templatesList issue templates in a Huly project. Templates define reusable issue configurations. Returns templates sorted by modification date (newest first).
get_issue_templateRetrieve 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_templateCreate 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_templateCreate 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_templateUpdate 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_templatePermanently delete a Huly issue template. This action cannot be undone.
add_template_childAdd 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_childRemove a child (sub-task) template from an issue template by its child ID. Get child IDs from get_issue_template response.
add_issue_relationAdd 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_relationRemove 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_relationsList 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_issueLink 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_issueRemove a document link from an issue. Idempotent: no-op if the document is not linked.
list_related_issue_targetsList 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_targetSet 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_targetDelete 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

ToolDescription
list_commentsList comments on a Huly issue. Returns comments sorted by creation date (oldest first).
add_commentAdd 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_commentUpdate 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_commentDelete a comment from a Huly issue. This action cannot be undone.

Milestones

ToolDescription
list_milestonesList milestones in a Huly project. Returns milestones sorted by modification date (newest first).
get_milestoneRetrieve full details for a Huly milestone. Use this to view milestone content and metadata.
create_milestoneCreate 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_milestoneUpdate 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_milestoneSet or clear the milestone on a Huly issue. Pass null for milestone to clear it.
delete_milestonePermanently delete a Huly milestone. This action cannot be undone.

Documents

ToolDescription
list_document_snapshotsList 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_snapshotGet 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_teamspacesList all Huly document teamspaces. Returns teamspaces sorted by name. Supports filtering by archived status.
get_teamspaceGet details for a Huly document teamspace including document count. Finds by name or ID, including archived teamspaces.
create_teamspaceCreate a new Huly document teamspace. Idempotent: returns existing teamspace if one with the same name exists.
update_teamspaceUpdate fields on an existing Huly document teamspace. Only provided fields are modified. Set description to null to clear it.
delete_teamspacePermanently delete a Huly document teamspace. This action cannot be undone.
list_documentsList 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_documentRetrieve 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_documentCreate 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_documentEdit 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_commentsList 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_documentPermanently delete a Huly document. This action cannot be undone.

Storage

ToolDescription
upload_fileUpload a file to Huly storage. Provide ONE of: filePath (local file - preferred), fileUrl (fetch from URL), or data (base64 - for small files only). Returns blob ID and URL for referencing the file.

Attachments

ToolDescription
list_attachmentsList attachments on a Huly object (issue, document, etc.). Returns attachments sorted by modification date (newest first).
get_attachmentRetrieve full details for a Huly attachment including download URL.
add_attachmentAdd an attachment to a Huly object. Provide ONE of: filePath (local file - preferred), fileUrl (fetch from URL), or data (base64). Returns the attachment ID and download URL.
update_attachmentUpdate attachment metadata (description, pinned status).
delete_attachmentPermanently delete an attachment. This action cannot be undone.
pin_attachmentPin or unpin an attachment.
download_attachmentGet download URL for an attachment along with file metadata (name, type, size).
add_issue_attachmentAdd an attachment to a Huly issue. Convenience method that finds the issue by project and identifier. Provide ONE of: filePath, fileUrl, or data.
add_document_attachmentAdd an attachment to a Huly document. Convenience method that finds the document by teamspace and title/ID. Provide ONE of: filePath, fileUrl, or data.
save_attachmentSave/bookmark an attachment for later reference. Idempotent when already saved.
unsave_attachmentRemove an attachment from saved/bookmarks.
list_saved_attachmentsList saved/bookmarked attachments for the current user.
list_drawingsList drawings attached to a raw Huly parent object.
get_drawingGet a drawing by ID.
create_drawingCreate a drawing under a raw Huly parent object.
update_drawingUpdate drawing content. Pass null content to clear it.
delete_drawingDelete a drawing. This action cannot be undone.

Contacts

ToolDescription
list_personsList 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_personRetrieve full details for a person including contact channels. Use personId or email to identify the person.
create_personCreate a new person in Huly. Returns the created person ID.
update_personUpdate fields on an existing person. Only provided fields are modified.
delete_personPermanently delete a person from Huly. This action cannot be undone.
list_employeesList employees (persons who are team members). Returns employees sorted by modification date (newest first).
list_contact_channel_providersList supported contact channel provider labels for person and organization channel tools.
list_person_channelsList 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_channelIdempotently 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_channelUpdate 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_channelRemove 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_organizationsList all organizations in the Huly workspace. Returns organizations sorted by modification date (newest first).
create_organizationCreate 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_organizationRetrieve 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_organizationUpdate 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_organizationPermanently 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_customerApply 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.
add_organization_channelIdempotently 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_channelsList contact channels for an organization identified by ID or exact unique organization name. Returns channelId, provider label, value, and optional activity metadata.
update_organization_channelUpdate 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_channelRemove 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_memberLink 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_membersList 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_organizationsList all organizations that a person is a member of. Provide personId or email. Returns each organization's ID and name.
remove_organization_memberUnlink 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.

Channels

ToolDescription
list_channel_membersList members of a Huly channel by channel name or ID. Returns each member account UUID and the workspace display name when available.
add_channel_membersIdempotently 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_membersIdempotently 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_channelJoin a non-archived Huly channel as the authenticated account. Idempotent when the account is already a member.
leave_channelLeave 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_channelArchive a Huly channel by channel name or ID. This is reversible with unarchive_channel and is idempotent when the channel is already archived.
unarchive_channelUnarchive a Huly channel by channel name or ID. Idempotent when the channel is already active.
create_group_direct_messageOpen 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_starredSet 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_closedSet 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_channelsList all Huly channels. Returns channels sorted by name. Supports filtering by archived status. Supports searching by name substring (nameSearch) and topic substring (topicSearch).
get_channelRetrieve full details for a Huly channel including topic and member list.
create_channelCreate a new channel in Huly. Returns the created channel ID and name.
update_channelUpdate fields on an existing Huly channel. Only provided fields are modified.
delete_channelPermanently delete a Huly channel. This action cannot be undone. For reversible channel lifecycle changes, use archive_channel and unarchive_channel instead.
list_channel_messagesList messages in a Huly channel. Returns messages sorted by date (newest first).
list_external_channel_messagesList read-only messages for an external Gmail or Telegram channel by channel name or ID. The limit defaults to 50 and is capped at 200. When this build does not include a compatible Huly external-message SDK/model for the requested provider, returns supported=false, an unsupportedReason, and an empty messages array; it never sends, replies, deletes, mutates, or returns fake messages.
send_channel_messageSend 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_messageUpdate 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_messagePermanently delete a channel message. This action cannot be undone.
list_direct_messagesList direct message conversations in Huly. Returns conversations sorted by date (newest first).
create_direct_messageOpen 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_messagesList 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_messageSend 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_messageUpdate 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_messagePermanently 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_repliesList replies in a message thread. Returns replies sorted by date (oldest first).
add_thread_replyAdd 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_replyUpdate 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_replyPermanently delete a thread reply. This action cannot be undone.
list_chat_message_attachmentsList 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_attachmentGet 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_attachmentAttach a file directly to a Huly channel message, direct-message message, or thread reply. Provide filename, contentType, and exactly one of filePath, fileUrl, or data.
update_chat_message_attachmentUpdate 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_attachmentDelete one file attached directly to a Huly channel message, direct-message message, or thread reply. The attachmentId must belong to the resolved target.

Calendar

ToolDescription
list_eventsList calendar events. Returns events sorted by date. Supports filtering by date range.
list_calendarsList 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.
get_eventRetrieve full details for a calendar event including description. Use this to view event content and metadata.
create_eventCreate 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. Returns the created event ID.
update_eventUpdate 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.
delete_eventPermanently delete a calendar event. This action cannot be undone.
list_schedulesList calendar scheduling links/availability schedules. Optional owner accepts an employee/person ID, exact name, or email.
get_scheduleRetrieve one calendar schedule including owner, availability, calendar target, time zone, and room information when it is a meeting schedule.
create_scheduleCreate a calendar schedule. Owner accepts an employee/person ID, exact name, or email; calendar can be targeted by calendarId or calendarName.
update_scheduleUpdate a calendar schedule. Supports owner, title, description, duration, interval, availability, timeZone, and calendar move by calendarId or calendarName.
delete_scheduleDelete a calendar schedule by scheduleId.
list_recurring_eventsList recurring event definitions. Returns recurring events sorted by modification date (newest first).
create_recurring_eventCreate 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_instancesList 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

ToolDescription
log_timeLog time spent on a Huly issue. Records a time entry with optional description. Time value is in minutes.
get_time_reportGet time tracking report for a specific Huly issue. Shows total time, estimation, remaining time, and all time entries.
list_time_spend_reportsList all time entries across issues. Supports filtering by project and date range. Returns entries sorted by date (newest first).
get_detailed_time_reportGet detailed time breakdown for a project. Shows total time grouped by issue and by employee. Supports date range filtering.
list_work_slotsList 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_timerStart 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_timerStop 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.
ToolDescription
fulltext_searchPerform 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

ToolDescription
list_associationsList 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_associationIdempotently 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_associationIdempotently 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_relationsList concrete Huly relation instances under an association, optionally filtered by source and target documents. Endpoint locators support raw, issue, document, and card. Requires at least one filter to avoid broad workspace scans.
create_relationIdempotently create one concrete relation between two resolved documents for a writable association. Endpoint locators support raw, issue, document, and card. Enforces association endpoint classes, direction, duplicate handling, automation-only restrictions, and cardinality.
delete_relationIdempotently delete one concrete relation by relation ID or by exact association/source/target triple. Triple endpoint locators support raw, issue, document, and card. Triple deletes use the same direction semantics as create_relation and fail if the selector is ambiguous.

Activity

ToolDescription
list_activityList 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).
get_activity_messageGet a single activity message by ID, including subclass metadata when available.
pin_activity_messagePin or unpin an activity message. Idempotent when the pin state already matches.
list_activity_filtersList configured activity filters in display order.
list_activity_referencesList activity references connected to a raw Huly object. Use direction to list references from the object, to the object, or both.
list_activity_repliesList thread replies on any activity message, not only channel messages.
add_activity_replyAdd 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_replyUpdate 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_replyDelete a generic activity reply.
add_reactionAdd an emoji reaction to an activity message.
remove_reactionRemove an emoji reaction from an activity message.
list_reactionsList reactions on an activity message.
save_messageSave/bookmark an activity message for later reference.
unsave_messageRemove an activity message from saved/bookmarks.
list_saved_messagesList saved/bookmarked activity messages.
list_mentionsList @mentions of the current user in activity messages.

Notifications

ToolDescription
list_notification_providersList notification providers such as inbox, push, and sound. Use provider IDs from this tool when updating provider or type settings.
list_notification_typesList notification types. Use type IDs from this tool when updating provider-specific notification type settings.
list_notificationsList inbox notifications. Returns notifications sorted by modification date (newest first). Supports filtering by read/archived status.
get_notificationRetrieve full details for a notification. Use this to view notification content and metadata.
mark_notification_readMark a notification as read. Idempotent: returns success when the notification is already read.
mark_notification_unreadMark a notification as unread. Idempotent: returns success when the notification is already unread.
mark_all_notifications_readMark all unread notifications as read. Returns the count of notifications marked.
archive_notificationArchive a notification. Archived notifications are hidden from the main inbox view. Idempotent when already archived.
unarchive_notificationUnarchive a notification so it can appear in active notification lists again. Idempotent when already active.
archive_all_notificationsArchive all notifications. Returns the count of notifications archived.
delete_notificationPermanently delete a notification. This action cannot be undone.
get_notification_contextGet notification context for an entity. Returns tracking information for a specific object.
list_notification_contextsList notification contexts. Returns contexts sorted by last update timestamp (newest first). Supports filtering by pinned status and can include hidden contexts.
pin_notification_contextPin or unpin a notification context. Pinned contexts are highlighted in the inbox. Idempotent when the pin state already matches.
hide_notification_contextHide 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_contextArchive all inbox notifications in a notification context. Idempotent: returns count 0 when no active notifications remain.
unarchive_notification_contextUnarchive all archived inbox notifications in a notification context. Idempotent: returns count 0 when no archived notifications remain.
subscribe_to_object_notificationsSubscribe the authenticated account to notifications for a raw Huly object by adding a core collaborator row. Idempotent when already subscribed.
unsubscribe_from_object_notificationsUnsubscribe the authenticated account from notifications for a raw Huly object by removing its collaborator row. Idempotent when already absent.
list_notification_settingsList notification provider settings. Returns current notification preferences.
update_notification_provider_settingUpdate notification provider setting. Enable or disable notifications for a specific provider.
update_notification_type_settingEnable or disable one notification type for one provider. Creates the type setting only when the provider has a configurable setting in this workspace.
get_unread_notification_countGet the count of unread notifications.

Workspace

ToolDescription
list_workspace_membersList members in the current Huly workspace with their roles. Returns members with account IDs and roles.
update_member_roleUpdate a workspace member's role. Requires appropriate permissions. Valid roles: READONLYGUEST, DocGuest, GUEST, USER, MAINTAINER, OWNER, ADMIN.
get_workspace_infoGet information about the current workspace including name, URL, region, and settings.
list_workspacesList all workspaces accessible to the current user. Returns workspace summaries sorted by last visit.
create_workspaceCreate a new Huly workspace. Returns the workspace UUID and URL. Optionally specify a region.
delete_workspacePermanently delete the current workspace. This action cannot be undone. Use with extreme caution.
get_user_profileGet the current user's profile information including bio, location, and social links.
update_user_profileUpdate the current user's profile. Supports bio, city, country, website, social links, and public visibility.
update_guest_settingsUpdate workspace guest settings. Control read-only guest access and guest sign-up permissions.
create_access_linkCreate 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_regionsGet available regions for workspace creation. Returns region codes and display names.

Approvals

ToolDescription
list_approval_requestsList 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_requestRead 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_requestCreate 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_commentAdd 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_requestApprove 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_requestReject 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_requestCancel 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

ToolDescription
list_boardsList Huly boards from @hcengineering/board, sorted by name. Boards are task.Project-backed spaces; this is not the separate Huly Card module.
get_boardGet one Huly board by board _id or exact board name. Returns board metadata, project type, and card count.
create_boardCreate 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_boardUpdate a Huly board's name, description, or privacy. board accepts board _id or exact board name.
archive_boardArchive a Huly board by board _id or exact board name. This hides the board but does not delete cards.
unarchive_boardUnarchive a Huly board by board _id or exact board name.
list_board_cardsList cards on one @hcengineering/board board. board accepts board _id or exact board name; cards are sorted newest modified first.
get_board_cardGet 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_cardCreate 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_cardUpdate 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_cardArchive a board card. card accepts _id, CARD-123, bare number, or exact title scoped to the board.
unarchive_board_cardUnarchive a board card. card accepts _id, CARD-123, bare number, or exact title scoped to the board.
delete_board_cardPermanently delete an already archived board card using Huly removeCollection. Active cards are rejected; call archive_board_card first.
list_board_labelsList board label definitions. Board labels are @hcengineering/tags TagElement rows for board cards, with targetClass = @hcengineering/board Card.
create_board_labelCreate 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_labelUpdate a board label definition by TagElement _id or exact title. At least one of title, color, description, or category is required.
delete_board_labelDelete one board label definition by TagElement _id or exact title. This removes the label definition, not a board card.
list_board_card_labelsList 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_labelAttach 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_labelDetach a board label from one board card. Returns detached=false when the label exists but is not attached to that card.
list_board_menu_pagesRead-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_viewsRead-only list of board saved filtered views. Queries view.class.FilteredView where attachedTo = board.app.Board and reports own/shared visibility.
get_board_saved_viewRead 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_viewletsRead-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_preferenceRead the CommonBoardPreference row attached to board.app.Board. Returns present=false when the preference row is absent and never creates it.

Cards

ToolDescription
list_card_spacesList all Huly card spaces. Returns card spaces sorted by name. Card spaces are containers for cards.
list_master_tagsList 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_cardsList 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_cardRetrieve full details for a Huly card including markdown content. Use this to view card content and metadata.
create_cardCreate 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_cardUpdate 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_cardPermanently delete a Huly card. This action cannot be undone.

Collaborators

ToolDescription
list_object_collaboratorsList 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_collaboratorSubscribe 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_collaboratorUnsubscribe 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

ToolDescription
list_custom_fieldsList 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_valuesRead 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_fieldSet a custom field value on a document. Requires the document ID, class, field ID (from list_custom_fields), and value. Values are auto-parsed: numbers from numeric strings, booleans from 'true'/'false', strings as-is.

Drive

ToolDescription
list_drivesList 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_driveGet 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_driveIdempotently 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_driveUpdate 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_drivePermanently 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_membersIdempotently 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_membersIdempotently 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_ownersReplace 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_itemsList 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_itemGet 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_commentsList 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_commentAdd 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_commentUpdate 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_commentPermanently 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_activityList activity messages for a Drive file resolved by filePath or fileId. Provide only one locator. Returns activity sorted by date, newest first.
create_drive_folderIdempotently create a Drive folder path, creating missing parents like mkdir -p. Returns created=false when the full folder path already exists.
upload_drive_fileUpload a file into Drive at a full path including filename. Provide exactly one source: filePath, fileUrl, or base64 data. By default createParents=true creates missing parent folders and reports them.
upload_drive_file_versionUpload a new version for an existing Drive file resolved by file id or file path. Provide exactly one source: filePath, fileUrl, or base64 data. This increments the file version counter and makes the uploaded version current.
move_drive_itemMove 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_itemRename 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_itemPermanently 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_versionsList 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_versionRestore 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.

Inventory

ToolDescription
list_inventory_product_attachmentsList files attached directly to an inventory product resolved by product ID or exact name. Pass category to disambiguate duplicate product names.
get_inventory_product_attachmentGet one file attached directly to an inventory product. The attachmentId must belong to the resolved product.
add_inventory_product_attachmentAdd a file to an inventory product resolved by product ID or exact name. Provide exactly one of filePath, fileUrl, or data.
update_inventory_product_attachmentUpdate description and/or pinned state for a file attached directly to an inventory product. The attachmentId must belong to the resolved product.
delete_inventory_product_attachmentPermanently delete a file attached directly to an inventory product. The attachmentId must belong to the resolved product.
list_inventory_product_photosList photos attached directly to an inventory product resolved by product ID or exact name. Pass category to disambiguate duplicate product names.
get_inventory_product_photoGet one photo attached directly to an inventory product. The photoId must belong to the resolved product.
add_inventory_product_photoAdd a photo to an inventory product using Huly's product photos collection. Provide exactly one of filePath, fileUrl, or data.
update_inventory_product_photoUpdate description and/or pinned state for a photo attached directly to an inventory product. The photoId must belong to the resolved product.
delete_inventory_product_photoPermanently delete a photo attached directly to an inventory product. The photoId must belong to the resolved product.
list_inventory_product_commentsList comments attached directly to an inventory product resolved by product ID or exact name. Returns comments oldest first.
add_inventory_product_commentAdd a Markdown comment directly to an inventory product resolved by product ID or exact name. Pass category to disambiguate duplicate names. 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_inventory_product_commentUpdate a comment attached directly to an inventory product. The commentId must belong to the resolved product. 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_inventory_product_commentPermanently delete a comment attached directly to an inventory product. The commentId must belong to the resolved product.
list_inventory_product_activityList activity messages for an inventory product resolved by product ID or exact name. This is read-only audit/activity history, newest first.
list_inventory_categoriesList inventory categories sorted by name. Omit parentCategory to search all categories, or pass a parent category ID/exact name/root to list direct children. query filters names case-insensitively.
get_inventory_categoryGet one inventory category by ID or exact name. If the name is duplicated under different parents, pass parentCategory or use the category ID.
create_inventory_categoryCreate an inventory category. Defaults parentCategory to the Inventory root. Rejects duplicate category names under the same parent.
update_inventory_categoryRename and/or move an inventory category. category accepts ID or exact name; pass parentCategory when a name may be duplicated. Rejects duplicate names in the destination parent and self/descendant moves.
delete_inventory_categoryDelete an empty inventory category by ID or exact name. Refuses categories that still contain child categories or products; this action does not cascade.
list_inventory_productsList inventory products sorted by name. Optionally scope to category by ID/exact name and filter product names with query.
get_inventory_productGet one inventory product by ID or exact product name. If product names are duplicated, pass category or use the product ID.
create_inventory_productCreate an inventory product in a category resolved by ID or exact name. Rejects duplicate product names in the same category.
update_inventory_productRename and/or move an inventory product. product accepts ID or exact name; pass category when a name may be duplicated. Rejects duplicate names in the destination category.
delete_inventory_productDelete an inventory product by ID or exact name. Refuses products with variants, photos, attachments, or comments; this action does not cascade.
list_inventory_variantsList inventory variants/SKUs sorted by name. Optionally scope to product by ID/exact name; category can disambiguate product names. query filters variant names and SKUs.
get_inventory_variantGet one inventory variant by ID, exact variant name, or exact SKU. If the name/SKU is duplicated, pass product or use the variant ID.
create_inventory_variantCreate an inventory variant/SKU under a product resolved by ID or exact name. Rejects duplicate variant names or SKUs in the same product.
update_inventory_variantRename and/or change the SKU of an inventory variant. variant accepts ID, exact name, or exact SKU; pass product when needed. Rejects duplicate names or SKUs in the same product.
delete_inventory_variantDelete one inventory variant/SKU by ID, exact variant name, or exact SKU. This action does not delete its product.

Labels

ToolDescription
list_labelsList label/tag definitions in the workspace. Labels are global (not project-scoped). Returns labels for tracker issues sorted by modification date (newest first).
create_labelCreate a new label/tag definition in the workspace. La