Skip to main content
Glama

Hudu MCP Server

Connect Claude AI to your Hudu IT documentation platform. Once installed, Claude can search, read, create, and update your Hudu knowledge base, assets, passwords, companies, and more — directly from any Claude interface.


What This Does

This server implements the Model Context Protocol (MCP), giving Claude secure, structured access to the Hudu REST API. It runs as a local stdio process that Claude Desktop or Claude Code launches on demand.

Available Tools

Category

Tools

Articles

list, get, create, update, delete, archive, unarchive

Assets

list (global + per-company), get, create, update, delete, archive, unarchive, move layout

Asset Layouts

list, get, create, update

Asset Passwords

list, get, create, update, delete, archive, unarchive

Companies

list, get, create, update, delete, archive, unarchive

Expirations

list, update, delete

Exports

list, get, create

S3 Exports

create

Flag Types

list, get, create, update, delete

Flags

list, get, create, update, delete

Folders

list, get, create, update, delete

Groups

list, get

IP Addresses

list, get, create, update, delete

Lists

list, get, create, update, delete

Magic Dash

list, upsert, delete (by title or ID), update positions

Matchers

list, update, delete

Networks

list, get, create, update, delete

Password Folders

list, get, create, update, delete

Photos

list, get, create, update, delete

Public Photos

list, get, create, update

Procedures

list, get, create, update, delete, kickoff, duplicate, create from template

Procedure Tasks

list, get, create, update, delete

Rack Storages

list, get, create, update, delete

Rack Storage Items

list, get, create, update, delete

Relations

list, create, delete

Uploads

list, get, delete

Users

list, get

VLANs

list, get, create, update, delete

VLAN Zones

list, get, create, update, delete

Websites

list, get, create, update, delete

Activity Logs

list, delete

Navigation

jump to card, jump to company

API Info

get version


Related MCP server: HaloPSA API Gateway MCP Server

Prerequisites

  • Node.js 18 or newer — nodejs.org

  • Claude Desktop or Claude Code

  • A Hudu API key — generate one at Hudu Admin → Basic Information → API Keys


Installation

1. Clone and build

Clone the repo into the standard install location and build:

git clone https://github.com/Allied-Business-Solutions/hudu-mcp.git "$env:LOCALAPPDATA\Programs\HuduMCP"
cd "$env:LOCALAPPDATA\Programs\HuduMCP"
npm install
npm run build

This compiles the TypeScript source into dist/.

2. Configure Claude Desktop

Open (or create) your Claude Desktop config file:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Add the hudu entry under mcpServers:

{
  "mcpServers": {
    "hudu": {
      "command": "node",
      "args": ["C:/Users/YOUR_USERNAME/AppData/Local/Programs/HuduMCP/dist/index.js"],
      "env": {
        "HUDU_API_KEY": "your_api_key_here",
        "HUDU_BASE_URL": "https://your-instance.huducloud.com/api/v1"
      }
    }
  }
}

Replace YOUR_USERNAME with your Windows username, then fill in your API key and Hudu URL. Restart Claude Desktop.

3. Configure Claude Code

Add to ~/.claude/settings.json (or .claude/settings.json in your project):

{
  "mcpServers": {
    "hudu": {
      "command": "node",
      "args": ["C:/Users/YOUR_USERNAME/AppData/Local/Programs/HuduMCP/dist/index.js"],
      "env": {
        "HUDU_API_KEY": "your_api_key_here",
        "HUDU_BASE_URL": "https://your-instance.huducloud.com/api/v1"
      }
    }
  }
}

Replace YOUR_USERNAME with your Windows username, then fill in your API key and Hudu URL.


Environment Variables

Variable

Description

HUDU_API_KEY

Your Hudu API key (from Hudu Admin → Basic Information → API Keys)

HUDU_BASE_URL

Your Hudu instance API base URL, e.g. https://your-instance.huducloud.com/api/v1

See .env.example for a template.


Example Prompts

Once connected, you can ask Claude things like:

"Search Hudu for any articles about VPN setup and summarize what we have"

"Find all assets for Acme Corp and list their serial numbers"

"Create a new article called 'Windows 11 Deployment Guide' under the Acme Corp company with these steps: [paste steps]"

"Look up the password entry for the Acme firewall admin account"

"What procedures do we have documented for onboarding new employees?"

"Show me all SSL certificate expirations coming up in the next 30 days"


Troubleshooting

Tools don't appear in Claude Verify the config file is valid JSON and the path to dist/index.js is correct (e.g. C:/Users/YOUR_USERNAME/AppData/Local/Programs/HuduMCP/dist/index.js). Restart Claude Desktop after any config change.

HUDU_API_KEY is required error The env block in your Claude config is missing or the key name is wrong. Check that it's exactly HUDU_API_KEY.

HUDU_BASE_URL is required error Same — check that HUDU_BASE_URL is set and ends with /api/v1.

401 Unauthorized from Hudu Your API key is invalid or expired. Generate a new one from Hudu Admin → Basic Information → API Keys.

Node.js not found Install Node.js 18+ from nodejs.org and restart your terminal/Claude Desktop.


Development

npm run build    # compile TypeScript → dist/
npm run dev      # watch mode (recompiles on save)
npm start        # run the compiled server

File Structure

hudu-mcp/
├── src/
│   ├── api.ts       ← HTTP client helpers
│   ├── tools.ts     ← MCP tool definitions
│   └── index.ts     ← Server entry point + tool dispatch
├── dist/            ← Compiled output (git-ignored)
├── reference/
│   └── HuduRESTAPI.json  ← Hudu OpenAPI spec
├── package.json
├── tsconfig.json
├── .env.example
├── .gitignore
└── README.md

Contributing

To add a new tool:

  1. Add a Tool entry to the TOOLS array in src/tools.ts

  2. Add the corresponding case to the callTool switch in src/index.ts

  3. Run npm run build to verify it compiles

The Hudu API docs describe all available endpoints.


License

MIT

Available Tools

147 tools
archive_articleB

Archive a Knowledge Base Article by ID.

Inputs: id (required).

archive_assetC

Archive an Asset.

Inputs: id (required), company_id (required).

archive_asset_passwordB

Archive a Password by ID.

Inputs: id (required).

archive_companyB

Archive a company by ID.

Inputs: id (required).

create_articleC

Create a Knowledge Base Article.

Inputs: name (required), content, folder_id, company_id, +1 more.

create_assetB

Create an Asset under a specific company. Use custom_fields array for custom field values.

Inputs: name (required), company_id (required), asset_layout_id (required), primary_mail, +4 more.

create_asset_layoutC

Create a new Asset Layout.

Inputs: icon (required), name (required), color (required), icon_color (required), +6 more.

create_asset_passwordC

Create a new Password entry.

Inputs: name (required), company_id (required), url, password, +8 more.

create_companyD

Create a new company.

Inputs: name (required), zip, city, notes, +11 more.

create_exportC

Initiate a PDF or CSV export of a company.

Inputs: format (required), company_id (required), include_websites (required), include_passwords (required), +6 more.

create_flagC

Create a Flag on a record.

Inputs: flagable_id (required), flag_type_id (required), flagable_type (required), description.

create_flag_typeC

Create a new Flag Type.

Inputs: name (required), color (required).

create_folderC

Create a KB article folder.

Inputs: name (required), icon, company_id, description, +1 more.

create_ip_addressC

Create a new IP address record.

Inputs: address (required), company_id (required), fqdn, notes, +5 more.

create_listC

Create a new selectable List.

Inputs: name (required), list_items_attributes.

create_networkC

Create a new network.

Inputs: name (required), address (required), company_id (required), vlan_id, +4 more.

create_password_folderC

Create a new password folder.

Inputs: name (required), security (required), company_id, description, +1 more.

create_photoC

Upload a new Photo. Provide the local file path to the image file.

Inputs: caption (required), file_path (required), pinned, folder_id, +3 more.

create_procedureC

Create a new Procedure (Process).

Inputs: name (required), company_id, description, company_template.

create_procedure_from_templateC

Create a new Procedure instance from an existing template.

Inputs: id (required), name, company_id, description.

create_procedure_taskC

Create a new Procedure Task.

Inputs: name (required), procedure_id (required), user_id, due_date, +4 more.

create_public_photoA

Upload a new public photo and attach it to a record. Provide the local file path to the image.

Inputs: file_path (required), record_id (required), record_type (required).

create_rack_storageC

Create a new Rack Storage.

Inputs: name (required), company_id (required), width, height, +4 more.

create_rack_storage_itemC

Create a new Rack Storage Item.

Inputs: rack_storage_role_id (required), side, status, asset_id, +5 more.

create_relationC

Create a relation between two entities.

Inputs: toable_id (required), fromable_id (required), toable_type (required), fromable_type (required), +2 more.

create_s3_exportB

Initiate an S3 export of your Hudu data.

Inputs: no named parameters.

create_vlanC

Create a new VLAN.

Inputs: name (required), vlan_id (required), company_id (required), notes, +5 more.

create_vlan_zoneC

Create a new VLAN Zone.

Inputs: name (required), company_id (required), vlan_id_ranges (required), archived, +1 more.

create_websiteC

Add a website to monitor.

Inputs: name (required), company_id (required), notes, paused, +3 more.

delete_activity_logsB

Delete activity logs from a specific datetime. Set delete_unassigned_logs=true to only delete logs with no user.

Inputs: datetime (required), delete_unassigned_logs.

delete_articleB

Delete a Knowledge Base Article by ID.

Inputs: id (required).

delete_assetC

Delete an Asset.

Inputs: id (required), company_id (required).

delete_asset_passwordC

Delete a Password by ID.

Inputs: id (required).

delete_companyB

Delete a company by ID.

Inputs: id (required).

delete_expirationA

Permanently delete an expiration by ID.

Inputs: id (required).

delete_flagB

Delete a Flag by ID.

Inputs: id (required).

delete_flag_typeB

Delete a Flag Type by ID.

Inputs: id (required).

delete_folderC

Delete a folder by ID.

Inputs: id (required).

delete_ip_addressB

Delete an IP address by ID.

Inputs: id (required).

delete_listC

Delete a List by ID.

Inputs: id (required).

delete_magic_dashB

Delete a Magic Dash Item by title and company_name.

Inputs: title (required), company_name (required).

delete_magic_dash_by_idC

Delete a Magic Dash Item by ID.

Inputs: id (required).

delete_matcherA

Delete an integration matcher by ID.

Inputs: id (required).

delete_networkB

Delete a network by ID.

Inputs: id (required).

delete_password_folderB

Delete a password folder by ID.

Inputs: id (required).

delete_photoB

Delete a Photo by ID.

Inputs: id (required).

delete_procedureB

Delete a Procedure by ID.

Inputs: id (required).

delete_procedure_taskB

Delete a Procedure Task by ID.

Inputs: id (required).

delete_rack_storageB

Delete a Rack Storage by ID.

Inputs: id (required).

delete_rack_storage_itemB

Delete a Rack Storage Item by ID.

Inputs: id (required).

delete_relationA

Delete a Relation by ID.

Inputs: id (required).

delete_uploadB

Delete an upload by ID.

Inputs: id (required).

delete_vlanA

Delete a VLAN by ID.

Inputs: id (required).

delete_vlan_zoneA

Delete a VLAN Zone by ID.

Inputs: id (required).

delete_websiteC

Delete a monitored website by ID.

Inputs: id (required).

duplicate_procedureC

Duplicate an existing Procedure.

Inputs: id (required), company_id (required), name, description.

get_api_infoA

Retrieve Hudu instance version and date.

Inputs: no named parameters.

get_articleA

Get a single Knowledge Base Article by ID.

Inputs: id (required).

get_assetA

Get a single Asset by company_id and asset id.

Inputs: id (required), company_id (required).

get_asset_layoutB

Get a single Asset Layout by ID.

Inputs: id (required).

get_asset_passwordB

Get a single Password by ID.

Inputs: id (required).

get_companyA

Get a specific company by ID.

Inputs: id (required).

get_exportC

Get export metadata by ID.

Inputs: id (required), download.

get_flagB

Get a specific Flag by ID.

Inputs: id (required).

get_flag_typeA

Get a specific Flag Type by ID.

Inputs: id (required).

get_folderB

Get a folder by ID.

Inputs: id (required).

get_groupB

Retrieve a group by ID.

Inputs: id (required).

get_ip_addressB

Get a single IP address by ID.

Inputs: id (required).

get_listB

Get a specific List by ID.

Inputs: id (required).

get_networkA

Get a single network by ID.

Inputs: id (required).

get_password_folderB

Retrieve a password folder by ID.

Inputs: id (required).

get_photoA

Get a specific Photo by ID. Set download=true to get a download URL.

Inputs: id (required), download.

get_procedureB

Get a Procedure by ID.

Inputs: id (required).

get_procedure_taskA

Get a Procedure Task by ID.

Inputs: id (required).

get_public_photoA

Get a public photo by ID. Set download=true to get a download URL.

Inputs: id (required), download.

get_rack_storageB

Get a Rack Storage by ID.

Inputs: id (required).

get_rack_storage_itemA

Get a Rack Storage Item by ID.

Inputs: id (required).

get_uploadB

Get a specific upload by ID.

Inputs: id (required).

get_userB

Get a user by ID.

Inputs: id (required).

get_vlanA

Get a single VLAN by ID.

Inputs: id (required).

get_vlan_zoneB

Get a VLAN Zone by ID.

Inputs: id (required).

get_websiteB

Get a website by ID.

Inputs: id (required).

jump_to_cardB

Get a redirect URL to jump directly to an asset/record matched by integration details.

Inputs: integration_slug (required), integration_type (required), integration_id, integration_identifier.

jump_to_companyB

Get a redirect URL to jump directly to a company matched by integration details.

Inputs: integration_slug (required).

kickoff_procedureC

Start/kickoff a Procedure from a company process.

Inputs: id (required), name, asset_id.

list_activity_logsC

Retrieve a list of activity logs with optional filtering.

Inputs: page, user_id, page_size, start_date, +4 more.

list_articlesC

Get a list of Knowledge Base Articles.

Inputs: name, page, slug, draft, +5 more.

list_asset_layoutsC

Get a list of Asset Layouts.

Inputs: name, page, slug, active, +1 more.

list_asset_passwordsC

Get a list of Passwords.

Inputs: name, page, slug, search, +4 more.

list_assetsA

Retrieve a list of assets across all companies or filtered by company.

Inputs: id, name, page, slug, +7 more.

list_companiesC

Retrieve a list of companies.

Inputs: city, name, page, slug, +8 more.

list_company_assetsB

Get a list of Assets specific to a Company.

Inputs: company_id (required), page, archived, page_size.

list_expirationsA

Retrieve expirations for the account (domains, SSL certs, warranties, asset fields, etc.).

Inputs: page, archived, page_size, company_id, +3 more.

list_exportsA

Get available exports from the last 24 hours.

Inputs: no named parameters.

list_flagsC

Get a list of Flags.

Inputs: page, page_size, description, flagable_id, +2 more.

list_flag_typesC

Get a list of Flag Types.

Inputs: name, page, slug, color, +1 more.

list_foldersC

Retrieve a list of KB article folders.

Inputs: name, page, page_size, company_id, +1 more.

list_groupsC

Retrieve a list of groups (member lists exclude admins/super admins).

Inputs: name, page, search, default, +1 more.

list_ip_addressesC

Get a list of IP addresses.

Inputs: fqdn, status, address, asset_id, +4 more.

list_listsA

Get a list of selectable Lists used in asset fields.

Inputs: name, query.

list_magic_dashC

Retrieve a list of Magic Dash Items.

Inputs: page, title, page_size, company_id.

list_matchersC

List integration matchers (company mappings) for a specific integration.

Inputs: integration_id (required), page, matched, sync_id, +3 more.

list_networksC

Get a list of networks.

Inputs: name, slug, address, archived, +5 more.

list_password_foldersC

Retrieve a list of password folders.

Inputs: name, page, search, page_size, +1 more.

list_photosC

Get a list of Photos with optional filtering.

Inputs: page, archived, folder_id, page_size, +5 more.

list_proceduresC

Get a list of Procedures (Processes).

Inputs: name, page, slug, page_size, +4 more.

list_procedure_tasksD

Get a list of Procedure Tasks.

Inputs: name, company_id, procedure_id.

list_public_photosC

Get a list of public photos.

Inputs: page, page_size.

list_rack_storage_itemsC

Get a list of Rack Storage Items.

Inputs: side, status, asset_id, end_unit, +4 more.

list_rack_storagesC

Get a list of Rack Storages.

Inputs: height, max_width, min_width, company_id, +3 more.

list_relationsC

Get a list of all relations between entities.

Inputs: page, page_size.

list_uploadsA

Get a list of all file uploads.

Inputs: no named parameters.

list_usersC

Retrieve a list of users.

Inputs: page, email, search, archived, +5 more.

list_vlansC

Get a list of VLANs.

Inputs: name, vlan_id, archived, company_id, +3 more.

list_vlan_zonesC

Get a list of VLAN Zones.

Inputs: name, archived, company_id, created_at, +1 more.

list_websitesC

Get a list of monitored websites.

Inputs: name, page, slug, search, +2 more.

lookup_cardsC

Look up Hudu records by external integration details.

Inputs: integration_slug (required), integration_id, integration_identifier.

move_asset_layoutB

Move an Asset to a different Asset Layout, preserving matching field values.

Inputs: id (required), company_id (required), asset_layout_id (required).

unarchive_articleB

Unarchive a Knowledge Base Article by ID.

Inputs: id (required).

unarchive_assetC

Unarchive an Asset.

Inputs: id (required), company_id (required).

unarchive_asset_passwordB

Unarchive a Password by ID.

Inputs: id (required).

unarchive_companyB

Unarchive a company by ID.

Inputs: id (required).

update_articleC

Update a Knowledge Base Article.

Inputs: id (required), name, content, folder_id, +2 more.

update_assetC

Update an existing Asset.

Inputs: id (required), company_id (required), name, primary_mail, +4 more.

update_asset_layoutA

Update an Asset Layout including its fields. Include field id to update existing fields.

Inputs: id (required), icon, name, color, +7 more.

update_asset_passwordC

Update an existing Password entry.

Inputs: id (required), url, name, password, +9 more.

update_companyC

Update a specific company by ID.

Inputs: id (required), zip, city, name, +12 more.

update_expirationA

Update an expiration's archived status.

Inputs: id (required), archived.

update_flagD

Update a Flag.

Inputs: id (required), description, flagable_id, flag_type_id, +1 more.

update_flag_typeC

Update a Flag Type by ID.

Inputs: id (required), name, color.

update_folderC

Update a folder.

Inputs: id (required), icon, name, company_id, +2 more.

update_ip_addressC

Update an existing IP address.

Inputs: id (required), fqdn, notes, status, +6 more.

update_listA

Update a List. Include item id to update existing items; set _destroy: true to remove items.

Inputs: id (required), name, list_items_attributes.

update_magic_dash_positionsA

Reorder multiple Magic Dash Items for a company by updating their positions.

Inputs: positions (required), company_id (required).

update_matcherC

Update an integration matcher.

Inputs: id (required), sync_id, company_id, identifier, +1 more.

update_networkC

Update an existing network.

Inputs: id (required), name, address, vlan_id, +5 more.

update_password_folderC

Update an existing password folder.

Inputs: id (required), name, security, company_id, +2 more.

update_photoC

Update a Photo's metadata by ID.

Inputs: id (required), pinned, caption, folder_id, +3 more.

update_procedureC

Update an existing Procedure.

Inputs: id (required), name, archived, company_id, +2 more.

update_procedure_taskC

Update an existing Procedure Task.

Inputs: id (required), name, user_id, due_date, +6 more.

update_public_photoC

Update a public photo's record association.

Inputs: id (required), record_id (required), record_type (required).

update_rack_storageD

Update a Rack Storage.

Inputs: id (required), name, width, height, +4 more.

update_rack_storage_itemC

Update a Rack Storage Item.

Inputs: id (required), side, status, asset_id, +6 more.

update_vlanD

Update a VLAN.

Inputs: id (required), name, notes, vlan_id, +6 more.

update_vlan_zoneC

Update a VLAN Zone.

Inputs: id (required), name, archived, company_id, +2 more.

update_websiteC

Update a monitored website.

Inputs: id (required), name, notes, paused, +4 more.

upsert_magic_dashB

Create or update a Magic Dash Item (matched by title + company_name).

Inputs: title (required), message (required), company_name (required), icon, +4 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.6/5.0

    Scored across 147 tools

    Disambiguation4/5

    Most tools follow a clear resource+action pattern, making their purposes obvious. A few pairs like list_assets/list_company_assets and delete_magic_dash/delete_magic_dash_by_id could cause minor selection confusion, but the descriptions generally resolve the ambiguity.

    Naming Consistency4/5

    The vast majority of tools use a consistent verb_noun pattern such as list_*, get_*, create_*, update_*, delete_*, archive_*, and unarchive_*. Minor deviations like kickoff_procedure, upsert_magic_dash, jump_to_card, and lookup_cards break the pattern slightly, but the overall convention remains predictable.

    Tool Count1/5

    With 147 tools, this server is dramatically over-scoped for an MCP surface. Even though Hudu has many resource types, exposing every CRUD operation as a separate tool creates an unwieldy interface that could be consolidated or grouped.

    Completeness4/5

    The tool set covers CRUD and lifecycle operations for most major Hudu resources, including articles, assets, companies, procedures, networks, VLANs, and photos. Minor gaps exist, such as missing create_matcher, no delete for asset layouts, and limited user/group management, but agents can generally work around these.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Provides Claude with access to IT Glue documentation and asset management, enabling searching and retrieval of organizations, configurations, passwords, documents, and more.
      24
      Apache 2.0
    • A
      license
      A
      quality
      D
      maintenance
      Enables AI assistants to interact with Hudu IT documentation, providing tools for companies, assets, knowledge base articles, credentials, IPAM, racks, and more, with security gates for passwords and destructive operations.
      70
      18 npm
      MIT