Skip to main content
Glama
msoukhomlinov

iit-mcp-hudu

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HUDU_API_KEYYesYour Hudu API key. Required under the stdio transport and optional under http, where a request's X-Hudu-Api-Key header wins and this default fills in whatever it omits.
HUDU_BASE_URLYesThe Hudu origin to dial, e.g. https://your.hudu.host. Required under the stdio transport and optional under http, where a request's X-Hudu-Base-Url header wins and this default fills in whatever it omits.
HUDU_COOLDOWNNoThe 429 cooldown gate: on (default) arms a local deadline whose refusals answer with notSent: true; off retries a 429 per the agent profile instead.on
MCP_TRANSPORTNoSelects the transport: stdio (default) for Claude Code, Claude Desktop and VS Code, or http for remote MCP clients.stdio
HUDU_READ_ONLYNoWhen "true" (default) both mutation tools are omitted entirely. Set to "false" to enable mutations (requires also configuring HUDU_WRITE_POLICY).true
HUDU_TIMEOUT_MSNoThe whole-call deadline in positive integer milliseconds. Always sent to the SDK explicitly so it stays above the agent profile's 20 s.30000
HUDU_WRITE_ALLOWNoComma-separated canonical operation keys permitted when HUDU_WRITE_POLICY=allow_list. An empty or invalid allow-list fails startup.
HUDU_CACHE_PRESETNoToggles the read-through cache: on (default) selects the SDK's recommended per-entity TTL preset; off disables it so repeated reads re-dial Hudu.on
HUDU_SECRET_READSNoGoverns reads that return a plaintext credential (asset_passwords and password_folders resources). deny (default) refuses every such operation before any request; allow permits the credential-resource operations but never enables plaintext results.deny
HUDU_WRITE_POLICYNoDeployment-wide mutation policy: deny (default) rejects all mutations, allow_list permits only the canonical keys in HUDU_WRITE_ALLOW, and all permits the SDK's mutation surface.deny
HUDU_SEARCH_RESOURCESNoNarrows which resources the cross-resource reads (hudu_search and hudu_resolve_any, plus the same operations reached through hudu_read) may offer and query. Unset means the full set of the SDK's eight searchable resources.
HUDU_ALLOWED_BASE_HOSTSNohttp only. Comma-separated list of exact hostnames or *.example.com subdomain suffixes (no scheme, port or path; internationalised names in punycode) that a caller may name in X-Hudu-Base-Url. Required unless HUDU_ALLOW_ANY_BASE_HOST=true; when unset and HUDU_BASE_URL is set, only that default origin is accepted.
HUDU_ALLOW_ANY_BASE_HOSTNohttp only. Set to "true" to allow any caller-named origin when HUDU_ALLOWED_BASE_HOSTS is unset; without this opt-in the server refuses to boot when both HUDU_ALLOWED_BASE_HOSTS and HUDU_BASE_URL are unset.false

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
hudu_list_operationsA

List the operations the Hudu SDK implements, with the tool that exposes each one (when it has one), its effect, whether it needs a dry run or a confirmation flag, and the arguments it requires. The tool list on this server is a SUBSET: this is a curated core profile, and the catalog is how you discover a capability that has no tool of its own — find the row, call hudu_describe_operation for the exact schema, then hudu_read/hudu_write/hudu_delete. Rows with no "tool" are reachable only through hudu_read/hudu_write/hudu_delete. Rows with "reachable": false are deliberately not callable here and state why (an unbounded read, or a binary/download surface). Bounded: limit defaults to 40 and is hard-capped at 100, offset pages through the rest; the whole catalog is ~10k tokens, so ask for a filter or a page rather than dumping it.

hudu_describe_operationA

Return the full input schema, effect, flags, dry-run support, error vocabulary, related operations and preferredWhen guidance for ONE operation, so a capability can be called correctly without carrying every schema in context. Use it after hudu_list_operations named the operation and before hudu_read/hudu_write/hudu_delete. Takes the canonical operation key exactly as the catalog prints it (for example "companies.update") — never a tool name, and there is no fuzzy matching: an unknown key is a CONFIG_ERROR naming the nearest catalog keys.

hudu_readA

Execute only read operations by canonical registry key. input is a CLOSED per-operation contract (issues #70/#72): exactly the operation's declared fields - unknown fields are refused before any request (typed CONFIG_ERROR names the valid fields); the per-operation field table, types, vendor picklists and guidance notes are in the served input schema and in hudu_describe_operation (the same contract, zero wire cost). Runtime effect enforcement precedes SDK validation and HTTP. Reads have no dry run. Neither preview nor confirm is human consent: the host must enforce its own approval policy. Results mask credentials and asset custom fields by default.

hudu_searchA

Search Hudu. One tool, three modes: mode="search" (the default) runs the query; mode="help" returns how to use this tool; mode="resources" returns what is searchable and what each vendor text filter really covers. Only "search" needs query. mode="search": ranked, fuzzy search over article TITLE and BODY content, asset names, custom-field VALUES and identifiers, plus company/user/group/website names. Each hit carries resource, id, a snippet, a 0-100 score band and the fetch call for the full record. As a TOOL it defaults to tier "index" (build or await the body index), so the answer is complete rather than body-blind. Honesty: limit default 8 / max 25, snippetChars default 200 / max 400 (0 = none); a bound that bites sets meta.complete false and names itself in meta.reasons. hits=[] is a complete "nothing matched" answer ONLY when meta.complete is true and meta.degraded is null - read degraded first: it says when bodies were not searched ("body-not-indexed") or the index was cold ("vendor-only"). Not for identity lookup (hudu_find_* / hudu_get_*) or for paging (hudu_list_*). A field the mode cannot honour is a CONFIG_ERROR naming the fields it honours; a missing query is a CONFIG_ERROR naming mode:"help", never a silent help fallback.

hudu_resolve_anyA

Resolve an identifier against several resources and return the candidates that match. Preferred when the caller has an identifier but not the resource type; use the resource's own resolve when the type is known. Returns ResolutionCandidateHit rows for each resource that matched, with scanned/truncated counts; it does not throw RESOLUTION_AMBIGUOUS across resources. Bounded: limit defaults to 25 and is hard-capped at 100; a larger value throws CONFIG_ERROR and is never silently clamped. Do not use it when the resource type is known: call that resource's hudu_get_.

hudu_get_api_infoA

Return the API information document. Prefer api_info.get; this exists so every resource satisfies the same floor. Bounded: limit default 25, max 100; the client scan stops at 500 records / 4 pages (RESOLUTION_TRUNCATED, never a partial answer). Not for text discovery: call hudu_search.

hudu_get_company_contextA

Fetch a company together with the bounded context an agent needs about it. Preferred over four separate list calls when an agent starts work on a company. Returns CompanyContext. Bounded: every sub-list uses limit (default 25, max 100) — no sub-fetch walks the account. Not for paging: call hudu_search. Context depends on the resources available to this deployment; a refused credential answers UNAUTHORIZED (401, "Bad credentials") like every other tool, and any other failure keeps its real code — never partial results.

hudu_get_article_contextA

Fetch an article with its company and folder context. Preferred over three separate calls when an agent starts from an article. Returns ArticleContext. Bounded: every sub-list uses limit (default 25, max 100) — no sub-fetch walks the account. Not for paging: call hudu_search. Context depends on the resources available to this deployment; a refused credential answers UNAUTHORIZED (401, "Bad credentials") like every other tool, and any other failure keeps its real code — never partial results.

hudu_get_asset_contextA

Fetch an asset with the context an agent needs about it. Preferred over four separate calls when an agent starts from an asset. Returns AssetContext. Bounded: every sub-list uses limit (default 25, max 100) — no sub-fetch walks the account. Not for paging: call hudu_search. Context depends on the resources available to this deployment; a refused credential answers UNAUTHORIZED (401, "Bad credentials") like every other tool, and any other failure keeps its real code — never partial results.

hudu_get_asset_layoutA

Resolve an asset layout from an id, name or slug. Use when the identifier is a layout name or slug; asset_layouts.get is cheaper for a known id. Returns one record: a compact AssetLayoutSummary (icon_color, sidebar_folder_id, include_passwords, … dropped); expand: true returns the full AssetLayout. Bounded: limit default 25, max 100; the client scan stops at 500 records / 4 pages (RESOLUTION_TRUNCATED, never a partial answer). Not for text discovery: call hudu_search.

hudu_find_asset_passwords_by_slugA

Find one password record by its URL slug. Preferred over a full asset passwords scan for a slug lookup. Returns one record: a compact AssetPasswordSummary (passwordable_id, passwordable_type, description, … dropped); expand: true returns the full AssetPassword. Bounded: limit default 25, max 100; the client scan stops at 500 records / 4 pages (RESOLUTION_TRUNCATED, never a partial answer). Do not use it to enumerate or to page: it returns at most one exact match (call hudu_search or hudu_get_asset_password for that). Sensitive: returns credential-shaped fields; the SDK masks them in results by default and always in diagnostics.

hudu_find_websites_by_slugA

Find one website by its URL slug. Preferred over a full websites scan for a slug lookup. Returns one record: a compact WebsiteSummary (code, message, keyword, … dropped); expand: true returns the full Website. Bounded: limit default 25, max 100; the client scan stops at 500 records / 4 pages (RESOLUTION_TRUNCATED, never a partial answer). Do not use it to enumerate or to page: it returns at most one exact match (call hudu_search or hudu_get_website for that).

hudu_get_folderA

Resolve a folder from an id or name, optionally scoped to a company. Use when the identifier is a folder name; folders.get is cheaper for a known id. Returns one record: a compact FolderSummary (description, created_at, … dropped); expand: true returns the full Folder. Bounded: limit default 25, max 100; the client scan stops at 500 records / 4 pages (RESOLUTION_TRUNCATED, never a partial answer). Not for text discovery: call hudu_search.

hudu_get_password_folderA

Resolve a password folder from an id or name, optionally scoped to a company. Use when the identifier is a folder name; password_folders.get is cheaper for a known id. Returns one record: a compact PasswordFolderSummary (description, allowed_groups, created_at, … dropped); expand: true returns the full PasswordFolder. Bounded: limit default 25, max 100; the client scan stops at 500 records / 4 pages (RESOLUTION_TRUNCATED, never a partial answer). Not for text discovery: call hudu_search. Sensitive: returns credential-shaped fields; the SDK masks them in results by default and always in diagnostics.

hudu_get_groupA

Resolve a user group from an id, name or slug. Use when the identifier is a group name; groups.get is cheaper for a known id. Returns one record: a compact GroupSummary (url, created_at, members, … dropped); expand: true returns the full Group. Bounded: limit default 25, max 100; the client scan stops at 500 records / 4 pages (RESOLUTION_TRUNCATED, never a partial answer). Not for text discovery: call hudu_search.

hudu_list_companiesA

List ONE bounded page of companies, backed by the fixed operation companies.list. Returns at most page_size rows plus whether more exist; it never pages through the tenant. This tool takes no operation argument and cannot be redirected to a write. Prefer hudu_search or hudu_resolve_any to identify a single company, and hudu_get_company_context to read one. This is the ungated path for the companies.list read; use it rather than the approval-gated hudu_read / hudu_write / hudu_delete.

hudu_list_articlesA

List ONE bounded page of knowledge-base articles, backed by the fixed operation articles.list. Returns at most page_size rows plus whether more exist; it never pages through the tenant. This tool takes no operation argument and cannot be redirected to a write. Prefer hudu_search to find an article by text, and hudu_get_article_context to read one. This is the ungated path for the articles.list read; use it rather than the approval-gated hudu_read / hudu_write / hudu_delete.

hudu_list_assetsA

List ONE bounded page of assets across all companies, backed by the fixed operation assets.listAcrossCompanies. Returns at most page_size rows plus whether more exist; it never pages through the tenant. The operation is page-paginated by the vendor (page and page_size are sent upstream), so later pages are reachable by raising page. This tool takes no operation argument and cannot be redirected to a write. Filter by company_id, primary_serial, asset_layout_id or search. Prefer hudu_get_asset_context to read one asset in full, and hudu_search to find one by text. This is the ungated path for both assets.listAcrossCompanies and the company-scoped assets.list read (filter by company_id); use it rather than the approval-gated hudu_read / hudu_write / hudu_delete.

hudu_list_asset_layoutsA

List ONE bounded page of asset layouts, backed by the fixed operation asset_layouts.list. The vendor endpoint honours page but ignores page_size, so a page is the vendor’s own size and is returned whole; page N is always the vendor’s Nth page, so walking page never skips rows. has_more is conservative (true for any non-empty page); stop when a page comes back empty. This tool takes no operation argument and cannot be redirected to a write. Use the name or slug filter to find a layout; asset_layouts is not searchable, so hudu_search cannot return one. Prefer hudu_get_asset_layout to read one layout in full by name or slug. This is the ungated path for the asset_layouts.list read; use it rather than the approval-gated hudu_read / hudu_write / hudu_delete.

hudu_fetch_manyA

Fetch up to 20 single records across MIXED resources in ONE call — the batch form of the single-record reads (it collapses N sequential hudu_read calls into one). items is a CLOSED array of 1-20 entries; each entry is EXACTLY { resource, id, fields? } — no other keys. resource is one of the 22 bare-id resources; assets (company-scoped get) and the download resources (photos, public_photos, uploads, exports, s3_exports) are NOT fetchMany-shaped (no derived field set) and are refused pre-request with a pointer at the resource's own read operations. id is a NUMERIC non-negative vendor id — a string identifier is resolveAny territory, refused pre-request. fields (optional, 1 or more) is a CLIENT-SIDE projection of exact vendor field names, checked pre-request against the resource's derived field set. Duplicate { resource, id } items are INDEPENDENT requests (each issues its own GET and row; no dedup). Items are fetched sequentially through each resource's own get (no in-SDK fan-out); partial failure is PER-ITEM — one failed item never aborts the rest. ALL items are validated before any request (a violation is a CONFIG_ERROR naming every problem, ZERO wire). Read-only: it can issue no write; no dry run applies to reads.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.1/5.0

Scored across 20 tools

Disambiguation4/5

Most tools have distinct roles, but hudu_read overlaps with hudu_list_* and hudu_fetch_many for read access, and hudu_resolve_any overlaps with the resource-specific resolver tools. The descriptions give preferredWhen guidance, so an agent can usually recover the boundary, but the set is not perfectly crisp.

Naming Consistency4/5

All tools use the hudu_ prefix and snake_case, mostly following hudu_<verb>_<noun> (list_companies, get_asset_layout, find_websites_by_slug). A few generic or suffix forms (hudu_read, hudu_search, hudu_resolve_any, hudu_fetch_many) break the strict verb_noun pattern, but the convention remains readable and predictable.

Tool Count4/5

20 tools is on the heavy side, and several are convenience wrappers around hudu_read (context fetchers, list pages, resolvers). Given Hudu's breadth and the catalog/discovery layer, the count is defensible but slightly over-scoped for a curated MCP surface.

Completeness2/5

Read, search, resolve, context, list, and batch-fetch operations are well covered. However, hudu_write and hudu_delete are referenced throughout the descriptions but are absent from the tool list, leaving mutation and deletion workflows unreachable and creating a significant lifecycle gap for a CRUD-oriented Hudu API server.

Maintenance

ActivityMaintained
ResponsivenessResponsive