HODDS
ai.hodds/hoddshodds.aistreamable-httpv0.4.0Scanned
Find software, SaaS and APIs for a need in a sourced catalogue organised by business process.
19 tools: 3 can delete or cancel things, 1 do something that can't be undone, 5 change things and 10 only read.
- Reads private data · 1
- Reads text others write · 0
- Can send data out · 1
- No findings
Anlyon alternative
9 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
19 tools
Deletes or cancels 3Claude Code: deny
cancel_creator_planStops the subscription at the end of the paid period.No findings
Why it is in this group
- The name "cancel_creator_plan" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- title: Stop the creator plan
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
cancel_planStops the paid plan at the end of the Stripe period.No findings
Why it is in this group
- The name "cancel_plan" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Stops the paid plan at the end of the Stripe period. Then the paid watches are CLOSED and stay readable 30 days; the free watch and the agent tokens are unchanged. Without a paid plan the tool answers not_paid. Contract 0.4.0. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.
Annotations the server declares
- title: Stop the My ways plan
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
unwatch_needCloses a watch; its need, constraints and alerts are erased 30 days after closing.No findings
Why it is in this group
- The description's first verb is "close": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- title: Close a watch
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
Can't be undone 1Claude Code: ask
send_feedbackStores 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 a…Can send data outNo findings
Why it is in this group
- The name "send_feedback" says "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "send_feedback" says "send": it sends or publishes something to other people.
Description, as the server wrote it 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.
Annotations the server declares
- title: Report an outcome
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Changes things 5Claude Code: ask
ack_alertsAcknowledges alerts of one watch (alert_ids, or all: true for every alert of this watch); the only call that empties the pending delivery.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
Annotations the server declares
- title: Acknowledge alerts
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
rate_alertMarks one alert relevant or not_relevant, with an optional note of at most 500 characters.No findings
Why it is in this group
- The description's first verb is "mark": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Rate an alert
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
set_creator_processesReplaces the list of subscribed processes.No findings
Why it is in this group
- The name "set_creator_processes" says "set": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Set the subscribed processes
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
set_current_choiceSets a solution by id or free name (any process), null clears.No findings
Why it is in this group
- The name "set_current_choice" says "set": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Change the solution in place
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
watch_needOpens a watch on a need for the organisation of the token: constraints and software by id or name (any process).No findings
Why it is in this group
- The description's first verb is "open": a word for a change.
Description, as the server wrote it Opens a watch on a need for the organisation of the token: constraints and software by id or name (any process). CATEGORY follows a process. Returns the watch, initially not_computed; public rules produce a challenger and switch brief. Alerts arrive on following calls; unknown constraints stay uninterpreted. The FREE plan follows one active watch per organisation. Error codes beyond the free watch: free_watch_used (no paid plan; destination = Stripe Checkout), plan_ending (the paid plan is stopped: no new paid watch; destination = the Plan page /my/plan), in _meta["ai.hodds/error"]. Price: search is free; 1 watched solution free, then €0.50 per watched solution per month, €2 monthly minimum (excl. VAT); a 409 with destination is resolved by a person who opens that URL. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.
Annotations the server declares
- title: Watch a need
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 10Show 10 read-only tools
compare_solutionsCompare 2–3 catalogue IDs by required capabilities, offer, context and dated sources.No findings
Why it is in this group
- The name "compare_solutions" says "compare": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Compare solutions for a need
find_comparable_solutionsFind alternatives by required priority, optionally relative to one solution.No findings
Why it is in this group
- The name "find_comparable_solutions" says "find": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Find alternatives for a priority
get_creator_planReturns the demand data subscription of the organisation of the token: plan NONE or SUBSCRIBED, subscribed processes, pending removals, the coming invoice, payment provider and inv…No findings
Why it is in this group
- The name "get_creator_plan" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Read the creator plan
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_planReturns the plan of the organisation of the token: FREE, PAID, PAST_DUE, ENDING or ENDED; watched solutions billed in the current Stripe period, the coming invoice, the payment pro…No findings
Why it is in this group
- The name "get_plan" says "get": a word for reading.
Description, as the server wrote it Returns the plan of the organisation of the token: FREE, PAID, PAST_DUE, ENDING or ENDED; watched solutions billed in the current Stripe period, the coming invoice, the payment provider and the invoices. 1 watched solution free, then €0.50 per watched solution per month, €2 monthly minimum (excl. VAT), invoiced by VORAN, paid through Stripe. A paid watch is billed for a period when it is active at least one day of it, whatever the number of agents that read it. Contract 0.4.0. Needs an organisation token (Authorization: Bearer hodds_...); without it the tool returns the error token_required.
Annotations the server declares
- title: Read the My ways plan
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_solutionReturns 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, pri…No findings
Why it is in this group
- The name "get_solution" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get a catalogue record
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_watchReturns 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 rece…No findings
Why it is in this group
- The name "get_watch" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Read a watch
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_gapsReturns, for a subscribed process, the gaps formulated by HODDS and the client aggregates above the anonymity threshold (watched needs, organisations watching, NO_MATCH, current ch…No findings
Why it is in this group
- The name "list_gaps" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Read the demand data of a process
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_processesReturns 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 cat…No findings
Why it is in this group
- The name "list_processes" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: List processes
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_watchesLists the watches of the organisation with their challenger and number of pending alerts; include_closed adds the watches closed in the last 30 days.No findings
Why it is in this group
- The name "list_watches" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: List watches
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_solutionsSearches 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 "tr…Reads private dataNo findings
Why it is in this group
- The name "search_solutions" says "search": a word for reading.
What it can reach
- private-dataThe description's first sentence says "search" and "meeting": it reads calendars.
Description, as the server wrote it 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.
Annotations the server declares
- title: Search software for a need
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged untrusted-input.
- Reads private data1
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write0
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
No check matched anything in these tool definitions. That is not a safety guarantee.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 0.4.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http hodds https://hodds.ai/mcpclaude mcp add --transport http hodds https://hodds.ai/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__hodds__search_solutions",
"mcp__hodds__get_solution",
"mcp__hodds__list_processes",
"mcp__hodds__get_watch",
"mcp__hodds__list_watches",
"mcp__hodds__get_creator_plan",
"mcp__hodds__list_gaps",
"mcp__hodds__get_plan",
"mcp__hodds__compare_solutions",
"mcp__hodds__find_comparable_solutions"
],
"ask": [
"mcp__hodds__send_feedback",
"mcp__hodds__watch_need",
"mcp__hodds__set_current_choice",
"mcp__hodds__ack_alerts",
"mcp__hodds__rate_alert",
"mcp__hodds__set_creator_processes"
],
"deny": [
"mcp__hodds__unwatch_need",
"mcp__hodds__cancel_creator_plan",
"mcp__hodds__cancel_plan"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as hodds. Review it before you use it.
Capability tags behind 2 rules
- mcp__hodds__search_solutions private-data
- mcp__hodds__send_feedback outbound
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/ai.hodds/hodds/verify?hash=f747fbc47c6d8eda0b793e25a92d3ceed724443a80b8b77d56a9890f7a8cae6b" | jq -e '.changed == false'Pinned hash f747fbc47c6d, from Oct 26, 2026, 07:17 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/ai.hodds/hodds/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/ai.hodds/hodds)Source: MCP Registry. Synced Oct 26, 2026, 07:17 UTC.