Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HUDU_API_KEYYesThe key from Admin → Basic Information → API Keys. Sent as the x-api-key header.
HUDU_BASE_URLYesYour Hudu instance origin, e.g. https://hudu.example.com. A trailing slash or a trailing /api/v1 is normalised away; the client adds /api/v1 itself.
HUDU_READ_ONLYNoRegister only Read tools. 40 tools instead of 70. Set to '1', 'true', 'yes' or 'on' to enable.off
HUDU_MAX_RETRIESNoRetries for transient failures (timeouts, network errors, 429, 5xx), with full-jitter backoff. 0 to 10.3
HUDU_ALLOW_EXPORTSNoRegister the two bulk export tools. Set to '1', 'true', 'yes' or 'on' to enable.off
HUDU_MAX_CONCURRENCYNoSimultaneous in-flight requests. Maximum 32.4
HUDU_ALLOW_DESTRUCTIVENoRegister the 16 delete and purge tools, including the activity-log purge. Set to '1', 'true', 'yes' or 'on' to enable.off
HUDU_REQUEST_TIMEOUT_MSNoPer-request timeout in milliseconds. Maximum 600000.30000
HUDU_ALLOW_PASSWORD_REVEALNoRegister hudu_reveal_password, which returns one stored secret per call. Set to '1', 'true', 'yes' or 'on' to enable.off
HUDU_RATE_LIMIT_PER_MINUTENoClient-side request ceiling. Must be a positive integer no greater than 300.120

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
hudu_list_companiesA

List companies in Hudu. A company is the top-level container in Hudu; every asset, article, password and website belongs to exactly one.

To find a company by name, prefer search (matches broadly) over name (matches the name field). If the API key was created with a company scope, only that company is visible here and everything else returns 404.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_companyA

Fetch one company by its numeric id. A company is the top-level container in Hudu; every asset, article, password and website belongs to exactly one.

Use hudu_list_companies first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_companyA

Create a new company in Hudu. A company is the top-level container in Hudu; every asset, article, password and website belongs to exactly one.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_update_companyA

Update an existing company. A company is the top-level container in Hudu; every asset, article, password and website belongs to exactly one.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_company if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this company.

hudu_archive_companyA

Archive or unarchive a company. Archiving hides the record from normal views without deleting it, and is reversible by calling this tool again with archived: false.

This is the reversible alternative to deletion and should be preferred whenever the user wants something "removed" without saying they want it gone permanently.

Operation class: Update. Impact: Hides or restores this company. Reversible.

hudu_find_company_by_integrationA

Resolve a company in a connected integration (a PSA, RMM or similar) to its Hudu company record.

Use this when you arrive from another system holding that system's customer id rather than a Hudu id — for example a ticket that names its own account identifier. If you only have a customer name, use hudu_list_companies with search instead.

Operation class: Read.

hudu_lookup_integration_cardsA

List the integration cards Hudu holds for a given external record. Cards are the link between a Hudu asset or company and its counterpart in a connected PSA or RMM, and they carry the synced fields shown on the record.

Use this to answer "what does Hudu know about this device from our RMM?" without opening the RMM itself.

Operation class: Read.

hudu_list_assetsA

List assets in Hudu. An asset is any documented thing that belongs to a company — a server, a workstation, a firewall, a licence, a contact. The asset layout it was created from decides which custom fields it carries.

This is the only route that reads assets across every company, and it is read-only: creating, updating, archiving and deleting an asset all happen under /companies/{company_id}/assets. Keep the company_id of any record you might write to — hudu_get_asset, hudu_create_asset, hudu_update_asset, hudu_archive_asset and hudu_delete_asset all require it, and it cannot be recovered from the asset id alone. If you narrow the response with fields, keep "company_id" in the list.

Custom field values come back under fields as {id, label, value, position} objects rather than as top-level keys. search is the right first filter for a hostname or a fragment of a name; id is how you turn a bare asset id into the company id needed to write to it.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_list_company_assetsA

List the assets belonging to one company. An asset is any documented thing that belongs to a company — a server, a workstation, a firewall, a licence, a contact. The asset layout it was created from decides which custom fields it carries.

This route accepts paging and the archived flag and nothing else. To filter by name, serial, layout or free text within a company, call hudu_list_assets with company_id set instead — it reaches the same records and supports the full filter set.

Returns an object with items plus pagination facts. Hudu returns no total count for any collection, so page_was_full is the only honest signal that more records exist.

Operation class: Read.

hudu_get_assetA

Fetch one asset with every value stored on it. An asset is any documented thing that belongs to a company — a server, a workstation, a firewall, a licence, a contact. The asset layout it was created from decides which custom fields it carries.

Assets are read globally but written per company. This tool needs the owning company id as well as the asset id, because Hudu exposes no /assets/{id} route. If you found the asset with hudu_list_assets, take company_id straight from that record; if all you have is an asset id, call hudu_list_assets with id set to it and read company_id off the result.

Layout-defined data comes back under fields: an array of {id, label, value, position} objects, one per field the layout defines. Read it here before any update, because a PUT replaces the values it is given.

Operation class: Read.

hudu_create_assetA

Create an asset inside a company. An asset is any documented thing that belongs to a company — a server, a workstation, a firewall, a licence, a contact. The asset layout it was created from decides which custom fields it carries.

Every asset belongs to exactly one company and there is no global create route, so company_id is required. Choose asset_layout_id before calling: the layout fixes which custom fields the asset can hold and Hudu will not infer one. hudu_list_asset_layouts lists the layouts and hudu_get_asset_layout shows the field labels a layout defines, which are the keys custom_fields expects.

Returns the created asset, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails, including when a custom field label does not exist on the chosen layout.

Operation class: Create.

hudu_update_assetA

Update an existing asset. An asset is any documented thing that belongs to a company — a server, a workstation, a firewall, a licence, a contact. The asset layout it was created from decides which custom fields it carries.

Assets are read globally but written per company. This tool needs the owning company id as well as the asset id, because Hudu exposes no /assets/{id} route. If you found the asset with hudu_list_assets, take company_id straight from that record; if all you have is an asset id, call hudu_list_assets with id set to it and read company_id off the result.

Only the arguments you supply are sent, but each one replaces the stored value outright — this is a PUT, not a merge. Read the asset with hudu_get_asset first whenever you intend to add to a field rather than overwrite it. The same applies to custom_fields: send the full label/value set you want the asset to end up with.

Operation class: Update. Impact: Overwrites the supplied fields on this asset with the values given.

hudu_archive_assetA

Archive or unarchive an asset. Archiving hides it from normal views and from the default listings without deleting anything, and is reversible by calling this tool again with archived: false. Archived assets are still readable through hudu_list_assets with archived: true.

Assets are read globally but written per company. This tool needs the owning company id as well as the asset id, because Hudu exposes no /assets/{id} route. If you found the asset with hudu_list_assets, take company_id straight from that record; if all you have is an asset id, call hudu_list_assets with id set to it and read company_id off the result.

This is the reversible alternative to hudu_delete_asset and should be preferred whenever the user wants a decommissioned machine "removed" without saying they want its documentation gone permanently.

Operation class: Update. Impact: Hides or restores this asset. Reversible.

hudu_list_asset_layoutsA

List asset layouts in Hudu. An asset layout is the template behind an asset type: its icon and colour, whether its assets can hold passwords, photos, comments and files, and the set of custom fields every asset of that type carries. Layouts are instance-wide rather than per-company. Field definitions can be set when a layout is created; the documented shape for changing them afterwards contradicts the shape creation accepts, so this server does not expose field edits on update. There is no delete endpoint for layouts — set active: false to retire one.

Read this before writing any asset: the fields array on each layout gives the labels that hudu_create_asset and hudu_update_asset expect as custom_fields keys, in snake_case. This endpoint documents page but no page_size, so pages come back at the server's own size.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_asset_layoutA

Fetch one asset layout by its numeric id. An asset layout is the template behind an asset type: its icon and colour, whether its assets can hold passwords, photos, comments and files, and the set of custom fields every asset of that type carries. Layouts are instance-wide rather than per-company. Field definitions can be set when a layout is created; the documented shape for changing them afterwards contradicts the shape creation accepts, so this server does not expose field edits on update. There is no delete endpoint for layouts — set active: false to retire one.

Use hudu_list_asset_layouts first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_asset_layoutA

Create a new asset layout in Hudu. An asset layout is the template behind an asset type: its icon and colour, whether its assets can hold passwords, photos, comments and files, and the set of custom fields every asset of that type carries. Layouts are instance-wide rather than per-company. Field definitions can be set when a layout is created; the documented shape for changing them afterwards contradicts the shape creation accepts, so this server does not expose field edits on update. There is no delete endpoint for layouts — set active: false to retire one.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_update_asset_layoutA

Update an existing asset layout. An asset layout is the template behind an asset type: its icon and colour, whether its assets can hold passwords, photos, comments and files, and the set of custom fields every asset of that type carries. Layouts are instance-wide rather than per-company. Field definitions can be set when a layout is created; the documented shape for changing them afterwards contradicts the shape creation accepts, so this server does not expose field edits on update. There is no delete endpoint for layouts — set active: false to retire one.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_asset_layout if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this asset layout.

hudu_list_articlesA

List articles in Hudu. An article is a knowledge-base document: HTML content, optionally filed in a folder and optionally scoped to one company. Articles with no company are global to the instance.

Filter by company_id for one customer's knowledge base. Articles created without a company are global, and the API documents no filter that isolates those — request without company_id and select on a null company_id yourself.

enable_sharing: true returns only articles that currently have a public, unauthenticated share URL, which makes this the tool to answer "what of ours is exposed publicly?". draft: true returns unpublished work in progress.

Every record carries its full HTML content, which is large. Pass fields — for example ["id","name","company_id","folder_id","enable_sharing"] — when you are looking for an article rather than reading one, then fetch the body with hudu_get_article. Note also that no archived filter is documented, so archived articles cannot be selected for or against here.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_articleA

Fetch one article by its numeric id. An article is a knowledge-base document: HTML content, optionally filed in a folder and optionally scoped to one company. Articles with no company are global to the instance.

Use hudu_list_articles first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_articleA

Create a new article in Hudu. An article is a knowledge-base document: HTML content, optionally filed in a folder and optionally scoped to one company. Articles with no company are global to the instance.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_update_articleA

Update an existing article. An article is a knowledge-base document: HTML content, optionally filed in a folder and optionally scoped to one company. Articles with no company are global to the instance.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_article if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this article.

hudu_archive_articleA

Archive or unarchive a article. Archiving hides the record from normal views without deleting it, and is reversible by calling this tool again with archived: false.

This is the reversible alternative to deletion and should be preferred whenever the user wants something "removed" without saying they want it gone permanently.

Operation class: Update. Impact: Hides or restores this article. Reversible.

hudu_list_foldersA

List folders in Hudu. A folder groups knowledge-base articles. Folders nest through parent_folder_id, and a folder carrying a company_id belongs to that company rather than to the global knowledge base.

These are article folders. Passwords are organised by a separate password_folders resource with its own tools; do not use these ids there.

The response is flat, not a tree — reconstruct the hierarchy yourself by following each folder's parent_folder_id, which is null at the top level.

On in_company, the API documents exactly one sentence: "When true, only returns company-specific KB articles." It says nothing about what false does, nor how it interacts with company_id. Read it as "restrict to company-scoped folders and exclude global ones", and check the returned company_id values rather than trusting that reading.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_folderA

Fetch one folder by its numeric id. A folder groups knowledge-base articles. Folders nest through parent_folder_id, and a folder carrying a company_id belongs to that company rather than to the global knowledge base.

Use hudu_list_folders first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_folderA

Create a new folder in Hudu. A folder groups knowledge-base articles. Folders nest through parent_folder_id, and a folder carrying a company_id belongs to that company rather than to the global knowledge base.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_update_folderA

Update an existing folder. A folder groups knowledge-base articles. Folders nest through parent_folder_id, and a folder carrying a company_id belongs to that company rather than to the global knowledge base.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_folder if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this folder.

hudu_list_proceduresA

List procedures in Hudu. A procedure — called a Process in the Hudu interface — is an ordered checklist of tasks with a completion count, used for repeatable work such as onboarding, offboarding and server builds.

This API version exposes procedures read-only. There is no create, update or delete endpoint for them, so no such tool exists here and none is being withheld — process templates are authored in the Hudu web interface. The one write available is hudu_kickoff_procedure, which starts a new process from an existing template.

Results include both templates and processes already started from one: parent_procedure names the template a running process came from and is null on the template itself. total and completed count tasks, completion_percentage arrives as a string like "0%", and a non-null asset means the process is pinned to a specific device or person. For instructions that are read rather than worked through, look at articles instead (hudu_list_articles).

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_procedureA

Fetch one procedure by its numeric id. A procedure — called a Process in the Hudu interface — is an ordered checklist of tasks with a completion count, used for repeatable work such as onboarding, offboarding and server builds.

Use hudu_list_procedures first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_kickoff_procedureA

Start a new process from an existing procedure. Hudu copies the procedure's task list into a new process record with its own id, slug and URL, and returns that new record. Afterwards the company has a live checklist that its users can work through and tick off; the procedure it came from is unchanged and can be kicked off again.

Attach the new process to an asset with asset_id when the work concerns one specific device or person — that is how an onboarding checklist ends up on the employee record it belongs to. Give it a name when several runs of the same procedure would otherwise be indistinguishable, e.g. "Onboarding — J. Okafor".

Find the procedure id with hudu_list_procedures. Both optional inputs are sent as query parameters because that is what Hudu documents for this endpoint; it accepts no request body. Success answers 200 rather than the 201 you might expect from a create, and 404 covers both a missing procedure and an unrouted path.

Operation class: Create. Impact: Creates a live process in Hudu, visible to the users of the company that owns the procedure and appearing in their process list as outstanding work.

hudu_list_passwordsA

List passwords in Hudu. A password record in Hudu — the credential vault entry for a company, optionally attached to a specific asset or website. Hudu calls these "AssetPassword" in the API and simply "Passwords" in its interface.

The secret value and any stored OTP seed are withheld from these results. Everything else — name, username, URL, company, folder, timestamps — is returned, which answers most questions ("does this client have a firewall admin credential documented, and when was it last rotated?") without exposing anything. To read an actual secret you need hudu_reveal_password, one record at a time, and the server operator must have enabled it.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_passwordA

Fetch one password by its numeric id. A password record in Hudu — the credential vault entry for a company, optionally attached to a specific asset or website. Hudu calls these "AssetPassword" in the API and simply "Passwords" in its interface.

Use hudu_list_passwords first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_passwordA

Create a new password in Hudu. A password record in Hudu — the credential vault entry for a company, optionally attached to a specific asset or website. Hudu calls these "AssetPassword" in the API and simply "Passwords" in its interface.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_update_passwordA

Update an existing password. A password record in Hudu — the credential vault entry for a company, optionally attached to a specific asset or website. Hudu calls these "AssetPassword" in the API and simply "Passwords" in its interface.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_password if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this password.

hudu_archive_passwordA

Archive or unarchive a password. Archiving hides the record from normal views without deleting it, and is reversible by calling this tool again with archived: false.

This is the reversible alternative to deletion and should be preferred whenever the user wants something "removed" without saying they want it gone permanently.

Operation class: Update. Impact: Hides or restores this password. Reversible.

hudu_list_password_foldersA

List password folders in Hudu. A folder that groups password records within a company. Folders in Hudu can also carry their own access restrictions, so which folder a credential sits in affects who can see it.

This API version exposes password folders as read-only — there is no create, update or delete endpoint for them. Folders are managed in the Hudu web interface.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_password_folderA

Fetch one password folder by its numeric id. A folder that groups password records within a company. Folders in Hudu can also carry their own access restrictions, so which folder a credential sits in affects who can see it.

Use hudu_list_password_folders first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_list_networksA

List networks in Hudu. A network is one IP range documented in Hudu — a subnet in CIDR form, owned by a company, holding the individual ip_address records allocated inside it.

This endpoint documents neither page nor page_size, so there is no paging: the call returns everything matching your filters in a single response. If truncated comes back true the client cut records to stay inside its response budget, and because there is no next page the only ways to see the rest are narrower filters or a shorter fields list.

Filter by company_id when you are working for one customer; instances that document every client hold networks for all of them here. address matches the stored CIDR text, so it finds a subnet you already know the notation of rather than telling you which network a given host falls in — Hudu does not offer containment search. To see what is allocated inside a network, call hudu_list_ip_addresses with network_id set.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_networkA

Fetch one network by its numeric id. A network is one IP range documented in Hudu — a subnet in CIDR form, owned by a company, holding the individual ip_address records allocated inside it.

Use hudu_list_networks first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_networkA

Create a new network in Hudu. A network is one IP range documented in Hudu — a subnet in CIDR form, owned by a company, holding the individual ip_address records allocated inside it.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_update_networkA

Update an existing network. A network is one IP range documented in Hudu — a subnet in CIDR form, owned by a company, holding the individual ip_address records allocated inside it.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_network if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this network.

hudu_list_ip_addressesA

List ip addresses in Hudu. An ip_address record documents one address: its allocation status, its FQDN, the network it sits in and the asset it is configured on.

This endpoint documents neither page nor page_size, so there is no paging: the call returns everything matching your filters in a single response. If truncated comes back true the client cut records to stay inside its response budget, and because there is no next page the only ways to see the rest are narrower filters or a shorter fields list. That matters more here than anywhere else in this API: an unfiltered call against a large IPAM deployment returns every documented address in the instance, and a /16 that has been filled in can be tens of thousands of records. Always send a filter — network_id for one subnet, company_id for one customer, address or fqdn when you are chasing a single host.

address matches the stored text of one address, so it will not find every host in a subnet; use network_id for that. To go from an address to the machine, read asset_id and look it up with hudu_list_assets.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_ip_addressA

Fetch one ip address by its numeric id. An ip_address record documents one address: its allocation status, its FQDN, the network it sits in and the asset it is configured on.

Use hudu_list_ip_addresses first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_ip_addressA

Create a new ip address in Hudu. An ip_address record documents one address: its allocation status, its FQDN, the network it sits in and the asset it is configured on.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_update_ip_addressA

Update an existing ip address. An ip_address record documents one address: its allocation status, its FQDN, the network it sits in and the asset it is configured on.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_ip_address if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this ip address.

hudu_list_rack_storagesA

List rack storages in Hudu. A rack storage is a physical rack — a cabinet in a server room — owned by a company and standing at a location, with a height, a width, a starting unit number and a maximum wattage. It is the container only: the equipment mounted in it is modelled separately as rack storage items, via the hudu_*_rack_storage_item tools.

Filter by company_id for one customer's racks and location_id for one site. height, min_width and max_width filter on the rack dimensions, whose units the API never states — they are still usable for relative comparison against values already in the instance.

No name or free-text search filter is documented. To find a rack by name, list the company's racks and match the name field yourself.

This endpoint documents neither page nor page_size, so this tool sends neither and Hudu answers with everything matching in one response. The envelope reports page_was_full: false and next_page: null accordingly — there is no second page to ask for, and what you get back is the complete set for the filters given. If the result comes back marked truncated, that is this server trimming the response to fit its output budget, not the end of the data; narrow the filters or use fields to see the rest.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_rack_storageA

Fetch one rack storage by its numeric id. A rack storage is a physical rack — a cabinet in a server room — owned by a company and standing at a location, with a height, a width, a starting unit number and a maximum wattage. It is the container only: the equipment mounted in it is modelled separately as rack storage items, via the hudu_*_rack_storage_item tools.

Use hudu_list_rack_storages first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_rack_storageA

Create a new rack storage in Hudu. A rack storage is a physical rack — a cabinet in a server room — owned by a company and standing at a location, with a height, a width, a starting unit number and a maximum wattage. It is the container only: the equipment mounted in it is modelled separately as rack storage items, via the hudu_*_rack_storage_item tools.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_update_rack_storageA

Update an existing rack storage. A rack storage is a physical rack — a cabinet in a server room — owned by a company and standing at a location, with a height, a width, a starting unit number and a maximum wattage. It is the container only: the equipment mounted in it is modelled separately as rack storage items, via the hudu_*_rack_storage_item tools.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_rack_storage if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this rack storage.

hudu_list_rack_storage_itemsA

List rack storage items in Hudu. A rack storage item is one thing mounted in a rack: it points at the Hudu asset it represents, occupies the units from start_unit to end_unit on one side of the rack, and carries its own power figures. The rack itself is a rack storage — use the hudu_*_rack_storage tools for the cabinet.

Read this before answering a question about a specific rack: the API documents no way to list the items in one. The item schema has no rack field, and none of the filters scope to a rack — rack_storage_role_id filters by role, which is a classification, not the cabinet. The documented filters are role, asset, start_unit, end_unit, status, side and the two timestamps, all of them instance-wide. If you are asked what is in rack 12, say this API does not expose it rather than presenting an unscoped list as that rack's contents. It is worth reading one record with hudu_get_rack_storage_item to see whether your Hudu version returns a rack reference the published schema omits, but do not assume one is there.

To go the other way — from a device to where it is racked — filter by asset_id, which is the one filter that ties an item to something you can identify elsewhere in Hudu.

This endpoint documents neither page nor page_size, so this tool sends neither and Hudu answers with everything matching in one response. The envelope reports page_was_full: false and next_page: null accordingly — there is no second page to ask for, and what you get back is the complete set for the filters given. If the result comes back marked truncated, that is this server trimming the response to fit its output budget, not the end of the data; narrow the filters or use fields to see the rest.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_rack_storage_itemA

Fetch one rack storage item by its numeric id. A rack storage item is one thing mounted in a rack: it points at the Hudu asset it represents, occupies the units from start_unit to end_unit on one side of the rack, and carries its own power figures. The rack itself is a rack storage — use the hudu_*_rack_storage tools for the cabinet.

Use hudu_list_rack_storage_items first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_rack_storage_itemA

Create a new rack storage item in Hudu. A rack storage item is one thing mounted in a rack: it points at the Hudu asset it represents, occupies the units from start_unit to end_unit on one side of the rack, and carries its own power figures. The rack itself is a rack storage — use the hudu_*_rack_storage tools for the cabinet.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_update_rack_storage_itemA

Update an existing rack storage item. A rack storage item is one thing mounted in a rack: it points at the Hudu asset it represents, occupies the units from start_unit to end_unit on one side of the rack, and carries its own power figures. The rack itself is a rack storage — use the hudu_*_rack_storage tools for the cabinet.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_rack_storage_item if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this rack storage item.

hudu_list_websitesA

List websites in Hudu. A website in Hudu is a live monitor, not a documentation page: Hudu polls the host on a schedule and records its uptime, TLS certificate expiry, WHOIS registration and DNS records against the owning company.

There is no company filter on this endpoint. To answer "what are we monitoring for Contoso?", list websites and match on company_id in the returned records, or try search. The monitoring state of each record is in monitoring_status ("up"/"down"), code (last HTTP status) and monitored_at (when it was last checked).

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_websiteA

Fetch one website by its numeric id. A website in Hudu is a live monitor, not a documentation page: Hudu polls the host on a schedule and records its uptime, TLS certificate expiry, WHOIS registration and DNS records against the owning company.

Use hudu_list_websites first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_create_websiteA

Create a website monitor. A website in Hudu is a live monitor, not a documentation page: Hudu polls the host on a schedule and records its uptime, TLS certificate expiry, WHOIS registration and DNS records against the owning company.

This is not a passive documentation record. From the moment it is created, the Hudu instance begins making repeated outbound requests to the host you name — HTTP polling plus TLS, WHOIS and DNS lookups — on Hudu's own schedule, and will raise alerts against the owning company when they fail. Point it only at hosts the customer actually owns or is contracted to watch, and use disable_ssl, disable_whois and disable_dns to turn off individual checks that would only produce noise. paused: true creates the record with every check dormant.

Hudu publishes no success response for this endpoint, so the created record may come back empty even though the write succeeded. When that happens this tool returns website: null — confirm with hudu_list_websites filtered by name rather than retrying, which would create a second monitor. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create. Impact: Starts recurring outbound monitoring of an external host from the Hudu instance, and arms the alerts that go with it.

hudu_update_websiteA

Update an existing website. A website in Hudu is a live monitor, not a documentation page: Hudu polls the host on a schedule and records its uptime, TLS certificate expiry, WHOIS registration and DNS records against the owning company.

Only the fields you supply are sent. Be aware that Hudu applies these as a PUT: for fields you do send, the new value replaces the old one outright — read the record first with hudu_get_website if you intend to append rather than overwrite.

Operation class: Update. Impact: Overwrites the supplied fields on this website.

hudu_list_relationsA

List relations in Hudu. A relation is a link between any two Hudu records — an asset to the password that opens it, an article to the company it documents — stored as a from/to pair of type-and-id. Hudu exposes no update route for relations, so changing one means deleting it and creating a replacement.

This endpoint takes no filters whatsoever — not by record, not by type, not by company. Finding the relations on one asset therefore means paging through the whole set and matching fromable_type/fromable_id (or the toable_ pair) yourself. Expect to see each link twice: creating a relation also creates its mirror in the opposite direction, and is_inverse: true marks the mirror copy. Use this list to read the exact fromable_type/toable_type strings your instance uses before creating one.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_create_relationA

Create a new relation in Hudu. A relation is a link between any two Hudu records — an asset to the password that opens it, an article to the company it documents — stored as a from/to pair of type-and-id. Hudu exposes no update route for relations, so changing one means deleting it and creating a replacement.

Returns the created record, including the id Hudu assigned. Hudu answers 422 with the offending field named when validation fails.

Operation class: Create.

hudu_list_magic_dash_itemsA

List magic dash items in Hudu. A magic dash item is one of the coloured tiles across the top of a company page in Hudu — a title, a headline message, an optional shade and optional HTML detail. They are normally written by scripts and integrations to surface a live status ("Microsoft 365: 42 licences, 3 unassigned") next to the documentation.

The write endpoints identify the company by name, not by id — company_id is a read-side filter only, and there is no way to address a tile by company id when writing. The name has to match an existing Hudu company exactly. Take it from company_name on a listed item, or from name on the record hudu_list_companies returns.

There is no endpoint for fetching a single magic dash item, so this list is the only way to read one — filter by title and company_id to narrow to the tile you want and read its id and company_name from the result.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_upsert_magic_dash_itemA

Create a magic dash tile, or replace the existing one with the same title on the same company. A magic dash item is one of the coloured tiles across the top of a company page in Hudu — a title, a headline message, an optional shade and optional HTML detail. They are normally written by scripts and integrations to surface a live status ("Microsoft 365: 42 licences, 3 unassigned") next to the documentation.

Read that first sentence carefully: this single endpoint does both. Hudu matches on title plus company_name, and if a tile with that pair already exists it is overwritten with what you send — no error, no warning, and no way to recover what it said before. Check hudu_list_magic_dash_items for the title on that company first whenever you are not deliberately refreshing a tile you own.

The replacement is wholesale rather than a merge: fields you omit are not carried over from the previous tile, so send the complete tile you want to end up with every time.

The write endpoints identify the company by name, not by id — company_id is a read-side filter only, and there is no way to address a tile by company id when writing. The name has to match an existing Hudu company exactly. Take it from company_name on a listed item, or from name on the record hudu_list_companies returns.

Operation class: Update. Impact: Overwrites any existing tile with the same title on the same company, wholesale and without confirmation. Creates a new tile only when no such pair exists.

hudu_list_matchersA

List matchers in Hudu. A matcher is one row in the mapping table between a connected integration (a PSA or RMM such as Autotask or ConnectWise) and Hudu's companies: it ties one customer record in that external system to one Hudu company, so synced data lands in the right place.

integration_id is required on every call here. It is the number in the address bar when you edit the integration in Hudu's admin UI (…/integrations//edit); the API publishes no endpoint that lists integrations, so it has to come from the user or from a matcher you have already seen (integrator_id on the record).

The reason to call this is almost always matched: false, which returns the records the integration pulled in but could not tie to a Hudu company — the sync backlog someone has to work through. Each unmatched row carries the external name and, where Hudu guessed, a potential_company_id. Resolve them one at a time with hudu_update_matcher.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_update_matcherA

Point an integration record at a Hudu company, or correct which company it points at. A matcher is one row in the mapping table between a connected integration (a PSA or RMM such as Autotask or ConnectWise) and Hudu's companies: it ties one customer record in that external system to one Hudu company, so synced data lands in the right place.

This is how an unmatched record gets resolved, and it is the second half of a two-step job:

  1. Call hudu_list_matchers with the integration_id and matched: false to get the records the sync could not place. Each one gives you its id, the customer name as the external system spells it, and sometimes a potential_company_id that Hudu guessed at.

  2. Work out the right Hudu company — hudu_list_companies with search set to that name is the usual way — and call this tool with the matcher id and that company_id.

Matchers cannot be created through the API; they appear when an integration syncs. So this tool only ever edits rows that already exist, and a matcher id that returns 404 means the sync has not produced that record.

Only the fields you supply are sent, and each replaces the stored value outright.

Operation class: Update. Impact: Changes which Hudu company this integration record maps to, and therefore where future synced data from that record is filed.

hudu_get_api_infoA

Report the version and build date of the Hudu instance this server is pointed at. Returns version and date, nothing else.

Call this first whenever something behaves unexpectedly. The Hudu API changes between releases: several endpoints exist only on newer builds, and an older instance answers 404 for them — which is the same 404 it returns for a record that does not exist, so the two are indistinguishable without knowing the version. It is also the fastest way to confirm the base URL and API key are working at all, since it needs no ids and no permissions beyond a valid key.

Operation class: Read.

hudu_list_usersA

List users in Hudu. A user is a person with access to Hudu: either a member of your own team, or a portal member belonging to one client company.

Always send at least one filter. search (first and last name), email and security_level narrow this to the person actually being asked about; calling it with no filter enumerates every account on the instance, which is rarely what the user meant and is exactly the shape of a reconnaissance sweep.

These records contain personal and security-relevant data — email, phone_number, last_sign_in_ip, last_sign_in_at, sign_in_count, currently_signed_in, otp_required_for_login and security_level. Answer the question that was asked and nothing more. Do not copy these fields into a Hudu article, a file, a ticket, a chat message or any other tool call; in particular, last_sign_in_ip and otp_required_for_login describe how an account can be attacked. Use fields to request only the columns you need.

Users cannot be created, changed or removed through the Hudu API — that is the web admin UI only.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_userA

Fetch one user by its numeric id. A user is a person with access to Hudu: either a member of your own team, or a portal member belonging to one client company.

Use hudu_list_users first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_list_activity_logsA

List activity logs in Hudu. The activity log is Hudu's audit trail: one entry per action, recording who did it, what they did it to, and when.

This is the tool for "who changed this, and when". Each entry carries user_id and user_email (the actor), resource_type and resource_id (what they touched), and an action_message describing the action.

Combine the filters to answer a real question rather than paging the whole log:

  • History of one record: resource_type plus resource_id together. Sending one without the other does nothing.

  • What one person did: user_id, or user_email if you only have the address.

  • A time window: start_date. There is no end-date filter, so a log is bounded at the start only; to look at "last week" specifically, set start_date to the beginning of that week and read forward.

  • One kind of action: action_message.

Entries are ordered by Hudu, not by this server, and no total count is returned — so to find the most recent change to a record, request a page and read it rather than assuming the first entry is newest.

Reading the log never alters it. Purging it is a separate tool, hudu_purge_activity_logs, and is destructive.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_list_expirationsA

List expirations in Hudu. An expiration is a dated thing that will stop working: a domain registration, an SSL certificate, a hardware warranty, a date field on an asset, or an article review date.

This is the single call that answers "what is about to expire for this client". Hudu gathers expiry dates from across every module into one list, so you do not have to walk websites, then assets, then articles separately. Filter by company_id for one client and read the date field on each entry.

Each entry points at the thing that expires through expirationable_type and expirationable_id rather than embedding it — so once you have found the interesting entries, fetch the underlying record with the matching tool (hudu_get_website, hudu_get_asset, hudu_get_article) to get its name and details.

There is no date-range filter: Hudu returns the entries and this server passes them through unchanged, so compare date yourself rather than expecting the API to have narrowed to "the next 30 days". Entries are not filtered by whether they have already passed either — a date in the past means something has already expired.

Expirations are read-only through the API. To change one, edit the record that produced it: the website's expiry, the asset field's date, and so on.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_list_uploadsA

List uploads in Hudu. An upload is a file attached to a Hudu record — an asset, website, procedure, password, company or article. Each carries a url, name, mime, size and the uploadable_type/uploadable_id pair naming what it is attached to.

Hudu documents no filter and no pagination on this endpoint: it returns the uploads for the whole instance in one response, and there is no company_id or uploadable_id parameter to narrow it. On an instance with many attachments the response can be large and may be truncated by this server's output budget — check truncated before treating the list as complete. Filter client-side on uploadable_type and uploadable_id to find the attachments of one record.

This server cannot upload files. The Hudu upload endpoint takes multipart/form-data, which hudu-mcp 0.1.0 does not implement, so there is no create tool here and no way to add an attachment through this interface — tell the user to attach the file in the Hudu web UI. Do not claim a file was uploaded.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

hudu_get_uploadA

Fetch one upload by its numeric id. An upload is a file attached to a Hudu record — an asset, website, procedure, password, company or article. Each carries a url, name, mime, size and the uploadable_type/uploadable_id pair naming what it is attached to.

Use hudu_list_uploads first if you only know a name — ids are not guessable, and Hudu answers 404 identically for a missing record and an unrouted path.

Operation class: Read.

hudu_list_public_photosA

List public photos in Hudu. A public photo is an image published at a public URL and attached to an article or an asset note, so it can be rendered inside that content.

Each entry gives the image url plus the record_type and record_id it belongs to. The URL is public: anyone holding it can fetch the image without authenticating, so treat these links as shareable-by-accident and do not paste them somewhere they will outlive the conversation.

There is no filter on this endpoint — page through and match record_id yourself to find the photos for one article.

Creating and re-pointing public photos needs multipart/form-data, which hudu-mcp 0.1.0 does not implement, so this list is the only public-photo operation available here. Use the Hudu web UI to add or change one.

Returns an object with items plus pagination facts. Note that the Hudu API returns no total count for any collection, so page_was_full is the only honest signal that more records exist — read pagination_note before concluding a list is complete.

Operation class: Read.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ZenixSolutions/hudu-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server