Huly

MCP server for Huly project management system

@firfi/huly-mcp

npm npm downloads License: MIT MCP TypeScript MCP Servercooked at Monadical

MCP server for Huly integration.

Installation

The standard configuration works with most MCP clients:

{
  "mcpServers": {
    "huly": {
      "command": "npx",
      "args": ["-y", "@firfi/huly-mcp@latest"],
      "env": {
        "HULY_URL": "https://huly.app",
        "HULY_EMAIL": "[email protected]",
        "HULY_PASSWORD": "yourpassword",
        "HULY_WORKSPACE": "yourworkspace"
      }
    }
  }
}
claude mcp add huly \
  -e HULY_URL=https://huly.app \
  -e [email protected] \
  -e HULY_PASSWORD=yourpassword \
  -e HULY_WORKSPACE=yourworkspace \
  -- npx -y @firfi/huly-mcp@latest

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

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

Add to your user settings (.vscode/mcp.json) or use Command Palette → "MCP: Add Server":

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

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

Add the standard config to your Windsurf MCP configuration file.

Updating

The @latest tag in the install command always fetches the newest version. Most MCP clients cache the installed package, so you need to force a re-fetch:

ClientHow to update
Claude Codeclaude mcp remove huly then re-add with the install command above
Claude DesktopRestart the app (it runs npx on startup)
VS Code / CursorRestart the MCP server from the command palette or reload the window
npx (manual)npx -y @firfi/huly-mcp@latest — the -y flag skips the cache when @latest resolves to a new version

HTTP Transport

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

HULY_URL=https://huly.app \
[email protected] \
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

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 (default: 30000)
MCP_TRANSPORTNoTransport type: stdio (default) or http
MCP_HTTP_PORTNoHTTP server port (default: 3000)
MCP_HTTP_HOSTNoHTTP server host (default: 127.0.0.1)
TOOLSETSNoComma-separated tool categories to expose. If unset, all tools are exposed. Example: issues,projects,search

*Auth: Provide either HULY_EMAIL + HULY_PASSWORD or HULY_TOKEN.

Available Tools

TOOLSETS categories: projects, issues, comments, milestones, documents, storage, attachments, contacts, channels, calendar, time tracking, search, activity, notifications, workspace, cards, labels, tag-categories, test-management

Projects

ToolDescription
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.
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_issuesQuery Huly issues with optional filters. Returns issues sorted by modification date (newest first). Supports filtering by project, status, 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 create as a sub-issue by specifying parentIssue. Description supports markdown formatting. Returns the created issue identifier.
update_issueUpdate fields on an existing Huly issue. Only provided fields are modified. Description updates support markdown.
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_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. Returns the created component ID and label.
update_componentUpdate fields on an existing Huly component. Only provided fields are modified.
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_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. 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. 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.
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. 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) and relations (bidirectional links) with resolved identifiers. Does NOT return issues that this issue blocks — use list_issue_relations on the target issue to see that.

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.
update_commentUpdate an existing comment on a Huly issue. Comment body supports markdown formatting.
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. Returns the created milestone ID and label.
update_milestoneUpdate fields on an existing Huly milestone. Only provided fields are modified.
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_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). Supports searching by title substring (titleSearch) and content (contentSearch).
get_documentRetrieve full details for a Huly document including markdown content. Use this to view document content and metadata.
create_documentCreate a new document in a Huly teamspace. Content supports markdown formatting. Returns the created document id.
edit_documentEdit an existing Huly document. Two content modes (mutually exclusive): (1) 'content' for full replace, (2) 'old_text' + 'new_text' for targeted search-and-replace. Multiple matches error unless replace_all is true. Empty new_text deletes matched text. Also supports renaming via 'title'.
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.

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_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. Returns the created organization ID.

Channels

ToolDescription
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.
list_channel_messagesList messages in a Huly channel. Returns messages sorted by date (newest first).
send_channel_messageSend a message to a Huly channel. Message body supports markdown formatting.
list_direct_messagesList direct message conversations in Huly. Returns conversations sorted by date (newest first).
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.
update_thread_replyUpdate a thread reply. Only the body can be modified.
delete_thread_replyPermanently delete a thread reply. This action cannot be undone.

Calendar

ToolDescription
list_eventsList calendar events. Returns events sorted by date. Supports filtering by date range.
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. Returns the created event ID.
update_eventUpdate fields on an existing calendar event. Only provided fields are modified. Description updates support markdown.
delete_eventPermanently delete a calendar event. This action cannot be undone.
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. 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. Shows planned time blocks attached to ToDos. Supports filtering by employee and date range.
create_work_slotCreate a scheduled work slot. Attaches a time block to a ToDo for planning purposes.
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.

Search

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).

Activity

ToolDescription
list_activityList activity messages for a Huly object. Returns activity sorted by date (newest first).
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_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.
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.
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.
pin_notification_contextPin or unpin a notification context. Pinned contexts are highlighted in the inbox.
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.
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.
get_regionsGet available regions for workspace creation. Returns region codes and display names.

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. Returns the created card id.
update_cardUpdate fields on an existing Huly card. Only provided fields are modified. Content updates support markdown.
delete_cardPermanently delete a Huly card. This action cannot be undone.

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. Labels are global and can be attached to any issue. Returns existing label if one with the same title already exists (created=false). Use add_issue_label to attach a label to a specific issue.
update_labelUpdate a label/tag definition. Accepts label ID or title. Only provided fields are modified.
delete_labelPermanently delete a label/tag definition. Accepts label ID or title. This action cannot be undone.

Tag-Categories

ToolDescription
list_tag_categoriesList tag/label categories in the workspace. Categories group labels (e.g., 'Priority Labels', 'Type Labels'). Optional targetClass filter (defaults to all).
create_tag_categoryCreate a new tag/label category. Idempotent: returns existing category if one with the same label and targetClass already exists (created=false). Defaults targetClass to tracker issues.
update_tag_categoryUpdate a tag/label category. Accepts category ID or label name. Only provided fields are modified.
delete_tag_categoryPermanently delete a tag/label category. Accepts category ID or label name. Labels in this category will be orphaned (not deleted). This action cannot be undone.

Test-Management

ToolDescription
list_test_projectsList test management projects. Returns test projects sorted by name. These are separate from tracker projects.
list_test_suitesList test suites in a test project. Accepts project ID or name. Optional parent filter for nested suites.
get_test_suiteGet a single test suite by ID or name within a test project. Returns suite details and test case count.
create_test_suiteCreate a test suite in a test project. Idempotent: returns existing suite if one with the same name exists (created=false). Optional parent for nesting.
update_test_suiteUpdate a test suite. Accepts suite ID or name. Only provided fields are modified.
delete_test_suitePermanently delete a test suite. Accepts suite ID or name. This action cannot be undone.
list_test_casesList test cases in a test project. Optional filters: suite (ID or name), assignee (name or email).
get_test_caseGet a single test case by ID or name within a test project.
create_test_caseCreate a test case attached to a suite. Requires project and suite. Defaults: type=functional, priority=medium, status=draft.
update_test_caseUpdate a test case. Accepts test case ID or name. Only provided fields are modified. Set assignee to null to unassign.
delete_test_casePermanently delete a test case. Accepts test case ID or name. This action cannot be undone.
list_test_plansList test plans in a test management project. Returns plan names and IDs. Requires project ID or name.
get_test_planGet test plan details including its items (test cases). Accepts plan ID or name within a project.
create_test_planCreate a test plan in a project. Idempotent: returns existing plan if one with the same name exists (created=false).
update_test_planUpdate a test plan's name or description. Only provided fields are modified. Pass description=null to clear.
delete_test_planPermanently delete a test plan. This does not delete associated test runs. Cannot be undone.
add_test_plan_itemAdd a test case to a test plan. Resolves test case by ID or name. Optionally assign a person by email or name.
remove_test_plan_itemRemove a test case from a test plan by item ID. Get item IDs from get_test_plan.
list_test_runsList test runs in a test management project. Returns run names, IDs, and due dates.
get_test_runGet test run details including all results. Accepts run ID or name within a project.
create_test_runCreate a test run in a project. For bulk creation from a plan, use run_test_plan instead.
update_test_runUpdate a test run's name, description, or due date. Only provided fields are modified. Pass null to clear optional fields.
delete_test_runPermanently delete a test run. This does not delete associated test results. Cannot be undone.
list_test_resultsList test results in a test run. Returns result names, statuses, and assignees.
get_test_resultGet test result details. Accepts result ID or name.
create_test_resultCreate a test result in a run. Resolves test case by ID or name. Status defaults to 'untested'.
update_test_resultUpdate a test result's status, assignee, or description. Status values: untested, blocked, passed, failed.
delete_test_resultPermanently delete a test result. Cannot be undone.
run_test_planExecute a test plan: creates a test run and one test result per plan item. Returns the run ID and count of results created. Optionally name the run and set a due date.

Related Servers