Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

HODDS

REMOTE · HODDS.AI

Find software, SaaS and APIs for a need in a sourced catalogue organised by business process.

Available components

+3 this week 68 Trust /100

Last scanned (6 hours ago)

Scores higher than 53% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Search and Retrieval

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability64
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 3274 tokens (~155/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management33
  • Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage85
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 47% of tool parameters carry a description.Partial
  • Structured output schemas are declared (90% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 22 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 30 Oct 26 0
    • Tool “cancel_plan” rewrote its description, which is the text the model reads security
    • Tool “get_plan” rewrote its description, which is the text the model reads security
    • Tool “watch_need” rewrote its description, which is the text the model reads security
    • Server version: 0.6.0 → 0.7.0 functional
    • “watch_need” added an optional parameter “target” cosmetic
  • 29 Oct 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “cancel_plan” rewrote its description, which is the text the model reads security
    • Tool “get_plan” rewrote its description, which is the text the model reads security
    • Tool “watch_need” rewrote its description, which is the text the model reads security
    • Server version: 0.5.0 → 0.6.0 functional
  • 28 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Oct 26 0
    • Tool “cancel_plan” rewrote its description, which is the text the model reads security
    • Tool “get_plan” rewrote its description, which is the text the model reads security
    • Tool coverage: 100% → 90% ▼ functional
    • Schema quality: 2826 → 3188 ▼ functional
    • Tool coverage: 59% → 48% ▼ functional
    • Stability: unverified → 0.03 ▲ functional
    • Server version: 0.4.0 → 0.5.0 functional
    • New tool “read_choice” functional
    • New tool “watch_choice” functional
  • 26 Oct 26 64

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://hodds.ai/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=hodds.ai CN=WE1,O=Google Trust Services,C=US 27 Sept 2026 26 Dec 2026 ECDSA 256 ECDSA-SHA256 52990385e298dde10e5e4a802bbb8807
SANs: hodds.ai, *.hodds.ai
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of hodds.ai. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 1814, 3799 8, 8 Verified
hodds.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=15552000; includeSubDomains
content-security-policy default-src 'none'; frame-ancestors 'none'
x-content-type-options nosniff
x-frame-options DENY
referrer-policy no-referrer
permissions-policy camera=(), microphone=(), geolocation=(), payment=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://hodds.ai/mcp Verified 200
http (plaintext) http://hodds.ai/mcp HTTPS enforced 301 https://hodds.ai/mcp
MCP tools · 21 exposed · ~3,084 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ack_alerts ~132

Acknowledges alerts of one watch (alert_ids, or all: true for every alert of this watch); the only call that empties the pending delivery. Returns the number acknowledged and the number remaining for the organisation; a replay changes nothing. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

NameTypeReqDescription
alert_idsarray–Alert ids (a_...).
allboolean–true: every alert of this watch.
watch_idstringyesWatch id returned by watch_need or list_watches (w_...).
NameTypeReqDescription
ackedintegeryesAlerts acknowledged by this call.
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
remainingintegeryesUnacknowledged alerts left for the organisation.
summarystring–One sentence in English, or in French when the request was in French.

No examples provided.

cancel_creator_plan ~69

Stops the subscription at the end of the paid period. Listings, claims, declarations and ranking are unchanged; the coarse demand table stays free. Contract 0.3.1. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

Input schema present but exposes no named parameters.

NameTypeReqDescription
ends_onstringyes–
listings–yes–
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
plan–yes–
summarystringyesOne sentence in English, or in French when the request was in French (or in the language of the organisation).
then–yes–

No examples provided.

cancel_plan ~88

Stops the subscription at period end; new paid watches are refused immediately. Then paid watches close and remain readable 30 days. No renewal minimum. Agent tokens and legacy free rights are unchanged. Without a paid plan the tool answers not_paid. Contract 0.7.0. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

Input schema present but exposes no named parameters.

NameTypeReqDescription
ends_onstringyes–
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
plan–yes–
readable_untilstringyes–
summarystringyesOne English/French sentence, per request or organisation language.
then–yes–

No examples provided.

compare_solutions ~156

Compare 2–3 catalogue IDs by required capabilities, offer, context and dated sources. Unknown/stale/conflict stay explicit; unknown price is never zero. Discover IDs at /api/capabilities and details at /api/solutions/{id}/specification. Costs require all assumptions. Large result: repeat arguments with view; restart on 409. Public read, no billing/business writes; one call per POST.

NameTypeReqDescription
contextobject––
cost_scenario–––
criteriaarray––
localestring––
priority–––
priority_requiredboolean––
requirementsarray––
solution_idsarrayyes–
viewobject––

Structured output declared, but exposes no named fields.

No examples provided.

find_comparable_solutions ~152

Find alternatives by required priority, optionally relative to one solution. IDs/context: /api/capabilities. A match satisfies every requirement in one configuration. Evaluates the whole pilot before limit, separating match/unresolved/mismatch and stating catalogue coverage, not market coverage. Large result: repeat arguments with view; restart on 409. Public read, no billing/business writes; one call per POST.

NameTypeReqDescription
contextobject––
cost_scenario–––
criteriaarray––
limitinteger––
localestring––
priorityobjectyes–
reference_id–––
requirementsarray––
viewobject––

Structured output declared, but exposes no named fields.

No examples provided.

get_creator_plan ~103

Returns the demand data subscription of the organisation of the token: plan NONE or SUBSCRIBED, subscribed processes, pending removals, the coming invoice, payment provider and invoices. €10 excl. VAT per process per month, invoiced by VORAN, paid through Stripe; no effect on ranking. Contract 0.3.1. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

Input schema present but exposes no named parameters.

NameTypeReqDescription
billingobject|nullyes–
currency–yes–
ends_onstring|nullyes–
invoiced_by–yes–
invoicesarrayyes–
next_invoiceobject|nullyes–
paymentobject|nullyes–
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
pending_removalsarrayyes–
plan–yes–
price_per_process_month–yes–
processesarrayyes–
ranking_effect–yes–
sincestring|nullyes–
summarystringyesOne sentence in English, or in French when the request was in French (or in the language of the organisation).
unit–yes–

No examples provided.

get_plan ~204

Returns the plan of the organisation of the token: FREE, PAID, PAST_DUE, ENDING or ENDED; watched solutions billed in the current Stripe period, offer_version, invoice and payment proof. initial_basket, when present, gives the account's selected needs, exact upfront quote and activation status; its destination is for a human, not agent payment. prepaid-v1: €2 excl. VAT at the start of each monthly period covers the first 4 counted watches; initial basket extras: €0.50 each now; later extras: €0.50 excl. VAT at period end, never charged twice. Legacy rights keep the free unit and arrears until voluntary conversion. VORAN invoices through Stripe. Each watch identity counts once per period, even if closed, regardless of agent. Contract 0.7.0. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

Input schema present but exposes no named parameters.

NameTypeReqDescription
amount_due_estimatestring|nullyesExcl. VAT at next boundary: prepaid overage_due_estimate + next_period_minimum (no repeated current minimum); legacy max(2.00, watches_billed × 0.50) in arrears. Null outside paid plan; unknown taxes…
billingobject|nullyesName and country of the Stripe customer, as entered at Stripe.
billing_reconciliationobject–Present when earlier prepaid usage has no confirmed delivery and can no longer be retried automatically. Unknown does not mean unbilled: reconcile the original identifiers with Stripe before any fina…
currency–yes–
ends_onstring|nullyesLast day of the plan when it is ENDING, or PAST_DUE with its stop asked; null otherwise.
initial_basketobject–Current initial basket owned by the token's account, from the same snapshot as the human Plan. Absent without a current selection: expired PREPARED/EXPIRED and fully activated PAID history are exclud…
initial_payment_confirmedbooleanyesApplicable full initial payment confirmed server-side for accepted amount, offer and identities. Not return/card/active flag/zero invoice. Check version and period.
invoiced_by–yes–
invoicesarrayyes–
minimum_covers–yesPrepaid covers first 4 counted watches. Legacy counts paid watches only, excluding its free watch.
monthly_minimum–yes€2 excl. VAT per period, even empty: prepaid at start; legacy in arrears.
next_invoiceobject|nullyesStripe period end and excl. VAT estimate: ended-period overage + next minimum for prepaid; null outside paid plan.
next_period_minimum–yesActive prepaid: 2.00 excl. VAT for renewal, 0.00 if ending at boundary; null otherwise.
offer_version–yesServer-assigned; legacy rights retained until voluntary conversion. Clients cannot select legacy.
overage_due_estimatestring|nullyesActive prepaid, excl. VAT at period end: first period max(0,M-max(4,N))×0.50; later max(0,M-4)×0.50. N=initial paid basket, M=counted identities. Null otherwise.
paymentobject|nullyesThe payment method lives at Stripe; no digit of it is stored or returned.
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
plan–yesTechnical state, not entitlement: check version, first payment and period. FREE right only for legacy. PAST_DUE: renewal retries. ENDING: existing prepaid watches to boundary, no new ones. ENDED: no…
price_per_watch_month–yes–
sincestring|nullyesFirst day of the paid plan; null outside PAID, PAST_DUE and ENDING.
summarystringyesOne English/French sentence, per request or organisation language.
unit–yes–
upfront_amountstringyesExcl. VAT, identical on human Plan/API/MCP: current unpaid initial_basket amount max(2.00,N×0.50); otherwise 2.00 before new prepaid with no selection, or 0.00 if already paid or legacy. A paid unres…
watchesarrayyes–
watches_billedintegeryesPrepaid identities counted once if active at start or activated in [start,end). Closed exactly at start excluded; later closure restores no unit. Legacy excludes free watch, retaining prior period ru…
watches_totalintegeryeswatches[] count: active and closed within 30 days.

No examples provided.

get_solution ~127

Returns one HODDS catalogue record by id (an option id returned by search_solutions): name, homepage, summary in English and French, processes (the first is primary), keywords, pricing models without amounts (empty means unknown) with the pricing page, interfaces (public API, MCP server, self-hosting: yes, no or unknown), markets, publisher, dated sources and status. Status non_attested means the publisher has not confirmed the record; unknown values are stated as unknown. Read-only.

NameTypeReqDescription
idstringyesSolution id, e.g. "n8n".
NameTypeReqDescription
added_onstringyes–
data_portabilityobject–Documented export formats (lowercase) and catalogue ids of solutions the publisher documents an import from. Omitted, empty or without source = unknown.
data_residencyarray–Regions where the publisher documents that customer data is stored: EU or ISO 3166-1 alpha-2 codes. Omitted or empty = unknown.
founder_linkstring–Declared link between the HODDS founder and the solution. Never affects ranking.
hodds_statusobject–HODDS review status, distinct from status (publisher attestation). approved = reviewed by HODDS on checked_on, shown as "Approved by HODDS"; not_yet = listed, not reviewed yet, shown as "Not yet appr…
idstringyesStable slug, unique in the catalogue. Equals the file name without .json.
interfacesobjectyes–
keywordsarrayyesLowercase search terms in English and French describing what the solution does. Never another product's name. (scripts/catalogue.mjs checks lowercase for every script.)
marketsarray–ISO 3166-1 alpha-2 codes where the documented offer applies, or global. Omitted = not documented.
namestringyes–
open_source––Whether the solution is published under an open-source licence. Omitted = unknown.
pricingobjectyes–
processesarrayyesProcess ids from catalogue/processes.json (checked by scripts/catalogue.mjs). processes[0] is the primary process and decides the folder catalogue/solutions/<group>/.
publisherstring––
sourcesarrayyesOfficial pages actually read to write this record.
status–yesPublisher attestation. non_attested: the publisher has not attested this record. withdrawn is a reserved value for solutions that left the portfolio; no record carries it yet. Corrections: see /contr…
summaryobjectyesFactual description taken from the official source. No superlatives, no comparisons, no unverifiable claims.
urlstringyesOfficial homepage.
versionobject–Current version as published by the publisher. source = the publisher's official page that states it.
withdrawn_onstring–Day the solution left the portfolio. Allowed only when status is withdrawn.

No examples provided.

get_watch ~126

Returns one watch of the organisation: constraints, solution in place, challenger with its switch brief and HODDS status, challenger_reason when there is none, and the 50 most recent alerts, unacknowledged first (all: true for 200). Reading does not acknowledge. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

NameTypeReqDescription
allboolean–true: the 200 most recent alerts.
watch_idstringyesWatch id returned by watch_need or list_watches (w_...).
NameTypeReqDescription
alert_budgetinteger––
alertsarrayyesThe 50 most recent alerts, unacknowledged first (200 with all=true).
baseline_request_idstring|null–Search request_id that deduced process; null if process supplied.
challengerobject|nullyes–
challenger_reason–yes–
constraintsarrayyes–
created_atstringyes–
current_choicestring|nullyes–
current_choice_namestring|null–Unlinked name.
duplicateboolean–Opening: existing active watch reused.
last_review_atstring|null––
level–yes–
needstring|null–Natural-language need; absent/null for CATEGORY.
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
planstringyesFREE: legacy only; prepaid-v1: PAID. Organisation entitlement: GET /api/plan. No drafts.
processstringyes–
quiet_sincestringyes–
rules_versionstringyesPublic computation rules identifier; see /rules/.
status–yespayment_required returns a DRAFT error, never ACTIVE success.
summarystring–One English/French sentence, per request.
targetobject––
watch_idstringyes–

No examples provided.

list_gaps ~114

Returns, for a subscribed process, the gaps formulated by HODDS and the client aggregates above the anonymity threshold (watched needs, organisations watching, NO_MATCH, current choices, constraints, challengers delivered, GAP_RESOLVED). No need text, no organisation, no agent. Contract 0.3.1. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

NameTypeReqDescription
processstringyesProcess id of /catalogue/processes.json.
NameTypeReqDescription
aggregatesobjectyes–
as_ofstringyes–
gapsarrayyes–
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
processstringyesProcess id of /catalogue/processes.json.
rules_versionstringyes–
summarystringyesOne sentence in English, or in French when the request was in French (or in the language of the organisation).

No examples provided.

list_processes ~70

Returns the HODDS process taxonomy: groups (for example "Run the business") and processes (for example "invoice-and-get-paid"), with English and French labels and the number of catalogue records per process. A process id is accepted as the `process` filter of search_solutions. Read-only.

Input schema present but exposes no named parameters.

NameTypeReqDescription
catalogue_versionstringyes–
groupsarrayyes–
processesarrayyes–
solution_countintegeryesNumber of solutions in the catalogue.

No examples provided.

list_watches ~80

Lists the watches of the organisation with their challenger and number of pending alerts; include_closed adds the watches closed in the last 30 days. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

NameTypeReqDescription
include_closedboolean–true: include watches closed in the last 30 days.
NameTypeReqDescription
countintegeryes–
free_watch_usedbooleanyesHistorical free-watch indicator; false grants no prepaid right. See GET /api/plan.offer_version.
offer_versionstring––
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
summarystring–One sentence in English, or in French when the request was in French.
watchesarrayyes–

No examples provided.

rate_alert ~114

Marks one alert relevant or not_relevant, with an optional note of at most 500 characters. It never changes ranking. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

NameTypeReqDescription
alert_idstringyesAlert id (a_...).
notestring–Optional note.
ratingstringyesrelevant or not_relevant.
watch_idstringyesWatch id returned by watch_need or list_watches (w_...).
NameTypeReqDescription
alert_idstringyes–
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
rating–yes–
summarystring–One sentence in English, or in French when the request was in French.

No examples provided.

read_choice ~212

Public read: capabilities discovers IDs and context vocabulary; candidates finds IDs for a priority; compare compares 2–3 IDs; specification reads one dossier. Same operation/input with representation detail, transport.resume and reference reads a snapshot field or page. On 409 restart summary. No account or writes. Sources, unknowns and dated limits remain explicit. Read the single JSON content.text Outcome (no structuredContent). Candidate priority operators by discovered value_type: boolean equals true only; quantity (integer) or amount ({minor,currency,tax_basis}) equals, at_least, at_most; set equals, or contains with a nonempty array; enum equals a member of enum_values. Text is not a candidate priority. Use the request schema for required keys and vocabularies for values; comparison_rule does not define priority operators or imply superiority.

NameTypeReqDescription
inputobject––
operationstringyes–
referenceobject––
representationstring––
resumeobject––

No output schema declared.

No examples provided.

search_solutions ~287

Searches the HODDS catalogue of software, SaaS, APIs and online services, organised by business process, for records that match a need written in English or French (for example "transcribe my meetings" or "automatiser mes workflows"). Returns a request_id, a status and up to `limit` options; each option has an id, a label, a short description and source URLs (provenance). Ranking combines lexical matching on record names, keywords and processes with semantic similarity (multilingual embeddings on Cloudflare Workers AI), or lexical matching alone when the semantic part is unavailable; ownership or sponsorship never changes it. Confidence is always UNKNOWN: records are non-attested facts taken from publishers' public pages. Status NO_MATCH with an empty option list means that no record matches the need closely enough, or that the need belongs to a process with no record yet; results are never padded. Read-only.

NameTypeReqDescription
langstring–Language of option descriptions: "en" (default) or "fr".
limitinteger–Maximum number of options to return (1-50, default 10).
needstringyesThe need in natural language, English or French: the task to get done.
processstring–Optional process id that restricts the search (ids from list_processes, e.g. "automate-workflows").
NameTypeReqDescription
optionsarrayyes–
request_idstringyes–
status–yes–

No examples provided.

send_feedback ~184

Stores a declarative outcome report for an option returned by search_solutions: outcome YES (the option met the need), PARTLY or NO, with the request_id and the option id exactly as returned. It is the only HODDS tool that writes data without a token; the watch tools (watch_need and the others) write only with an organisation token. The report is stored as an unverified caller statement and never changes ranking by itself; the same report sent twice is stored once. When feedback storage is unavailable on the deployment, the tool returns an error and stores nothing.

NameTypeReqDescription
option_idstringyesid of the option being reported.
outcomestringyesYES: the option met the need. PARTLY: in part. NO: it did not.
request_idstringyesrequest_id returned by search_solutions (req_...).
NameTypeReqDescription
status–yes–

No examples provided.

set_creator_processes ~148

Replaces the list of subscribed processes. Without an active subscription the result has status 402 and a Stripe Checkout destination for a person to open. With one, an addition through this tool also answers status 402 with the Plan page as destination: nothing is charged here, only the page charges, after a person confirms it. Removals apply at once and the removed processes stay readable until the end of the paid period. An empty list is refused (empty_selection): use cancel_creator_plan. Contract 0.3.1. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

NameTypeReqDescription
processesarrayyes–

Structured output declared, but exposes no named fields.

No examples provided.

set_current_choice ~111

Sets a solution by id or free name (any process), null clears. Returns the watch; challenger recomputed later. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

NameTypeReqDescription
current_choicestring|null–Catalogue id, or null.
current_choice_namestring|null–Free name instead of id, or null.
watch_idstringyesWatch id returned by watch_need or list_watches (w_...).
NameTypeReqDescription
alert_budgetinteger––
alertsarrayyesThe 50 most recent alerts, unacknowledged first (200 with all=true).
baseline_request_idstring|null–Search request_id that deduced process; null if process supplied.
challengerobject|nullyes–
challenger_reason–yes–
constraintsarrayyes–
created_atstringyes–
current_choicestring|nullyes–
current_choice_namestring|null–Unlinked name.
duplicateboolean–Opening: existing active watch reused.
last_review_atstring|null––
level–yes–
needstring|null–Natural-language need; absent/null for CATEGORY.
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
planstringyesFREE: legacy only; prepaid-v1: PAID. Organisation entitlement: GET /api/plan. No drafts.
processstringyes–
quiet_sincestringyes–
rules_versionstringyesPublic computation rules identifier; see /rules/.
status–yespayment_required returns a DRAFT error, never ACTIVE success.
summarystring–One English/French sentence, per request.
targetobject––
watch_idstringyes–

No examples provided.

unwatch_need ~74

Closes a watch; its need, constraints and alerts are erased 30 days after closing. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

NameTypeReqDescription
watch_idstringyesWatch id returned by watch_need or list_watches (w_...).
NameTypeReqDescription
closed_atstringyes–
deleted_onstringyes–
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
status–yes–
summarystring–One sentence in English, or in French when the request was in French.
watch_idstringyes–

No examples provided.

watch_choice ~136

Requires a Bearer token and an existing owned NEED watch. bind explicitly attaches a canonical comparison request at expected_revision (optional explicit reset_baseline); review checks the current accepted documentary build; get reads the retained state and events with after/limit (1–50). No new watch, purchase or notification. A conflict requires an explicit caller decision; no automatic retry or reset.

NameTypeReqDescription
afterinteger––
expected_revisioninteger––
limitinteger––
operationstringyes–
requestobject––
reset_baselineboolean––
watch_idstringyes–

No output schema declared.

No examples provided.

watch_need ~397

Watches a need; CATEGORY follows a process. Optional target selects one product and capability_ids (empty = whole product), counted once. Targeted alerts report documented changes, conditions and unknowns, not a guarantee of suitability. Initially not_computed; rules produce challenger/switch brief; alerts on following calls. Unknown constraints stay uninterpreted. prepaid-v1: payment_required (402), draft_id, watch_status DRAFT, destination /my/plan. Legacy: free_watch_used (409, Checkout). plan_ending (409) refuses new watches. Errors: _meta["ai.hodds/error"]. Search is free. Price: €2 excl. VAT at the start of each monthly period covers the first 4 counted watches; initial basket extras: €0.50 each now; later extras: €0.50 excl. VAT at period end, never charged twice. A person accepts the summary at destination. Legacy rights stay unchanged. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.

NameTypeReqDescription
alert_budgetinteger–Alerts per calendar month (1-20, default 5); beyond, one DIGEST per day.
contextobject––
current_choicestring–Active catalogue id; any process accepted.
current_choice_namestring|null–Free name instead of id; exact unique matches resolve, others stay unlinked.
deliveryobject––
langstring–Language of the summary: "en" or "fr".
levelstring–NEED (default when need is given) or CATEGORY (process required, no need).
needstring–The need in natural language, English or French (absent for a CATEGORY watch).
processstring–Process id (from list_processes); deduced from the need when absent.
targetobject––
NameTypeReqDescription
alert_budgetinteger––
alertsarrayyesThe 50 most recent alerts, unacknowledged first (200 with all=true).
baseline_request_idstring|null–Search request_id that deduced process; null if process supplied.
challengerobject|nullyes–
challenger_reason–yes–
constraintsarrayyes–
created_atstringyes–
current_choicestring|nullyes–
current_choice_namestring|null–Unlinked name.
duplicateboolean–Opening: existing active watch reused.
last_review_atstring|null––
level–yes–
needstring|null–Natural-language need; absent/null for CATEGORY.
pendingobject–Delivery on the next call: alerts that wait for this organisation. Absent when there is nothing to deliver. Only ack_alerts empties it.
planstringyesFREE: legacy only; prepaid-v1: PAID. Organisation entitlement: GET /api/plan. No drafts.
processstringyes–
quiet_sincestringyes–
rules_versionstringyesPublic computation rules identifier; see /rules/.
status–yespayment_required returns a DRAFT error, never ACTIVE success.
summarystring–One English/French sentence, per request.
targetobject––
watch_idstringyes–

No examples provided.

Install

How do I install the HODDS MCP server?

HODDS is a hosted endpoint at https://hodds.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · hodds.ai

# add to Claude Code
claude mcp add --transport http ai-hodds-hodds 'https://hodds.ai/mcp'
Common questions

What is the HODDS MCP server?

HODDS is an MCP server listed in the public MCP registry as ai.hodds/hodds. Find software, SaaS and APIs for a need in a sourced catalogue organised by business process. This page covers its hosted endpoint (https://hodds.ai/mcp).

Is the HODDS MCP server safe to use?

HODDS scores 68 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the HODDS MCP server expose?

HODDS exposes 21 tools: search_solutions, get_solution, list_processes, send_feedback, watch_need, and 16 more. Their descriptions and schemas cost roughly 3,084 tokens of context every time the server is loaded.

Does the HODDS MCP server require authentication?

No. We connected to HODDS without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the HODDS MCP server still maintained?

HODDS is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.