Mahonia
Server Details
Read and edit Mahonia backpacking gear lists via share and edit links; no account needed.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- ryankiley/mahonia
- GitHub Stars
- 0
TDQS
Scored across 7 tools
Catalog tools (search_catalog, get_catalog_product) and list tools are clearly separated by resource and action. The only real overlap is get_list vs get_list_markdown, which return identical data in different formats; descriptions do distinguish them, but an agent must read carefully to pick the right one.
All seven tools follow a consistent snake_case verb_noun pattern (add_items, create_list, get_list, set_trip, search_catalog, etc.). No stylistic mixing; the convention is predictable throughout.
Seven tools is well-scoped for a packing-list plus gear-catalog domain. Each tool covers a distinct capability (create, read, append, update metadata, catalog search/lookup, alternate format export) with no filler.
The surface covers create, read, append-rows and metadata update, plus catalog lookup, but has no way to delete a list, remove a row, or edit/update an individual item once added. These are notable lifecycle gaps that will block common list-maintenance workflows.
Available Tools
7 toolsadd_itemsAdd rows to a listAInspect
Adds rows to an existing list. Takes the list's edit link and the rows; each row may name a folder, and a folder that doesn't exist yet is created.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| folder | No | A folder name for every row that doesn't name its own. | |
| edit_link | Yes | The list's edit link, whole (mahonia.app/e/CODE#token). The part after # is the write capability. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-destructive, non-idempotent write. The description adds real behavioral context beyond them: a folder that doesn't exist is created as a side effect, and rows may name a folder. It stops short of covering return values or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, front-loaded with the action followed by the inputs and the notable side effect. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three top-level parameters with a rich nested item schema, no output schema, and annotations covering the safety profile, the description says enough to invoke the tool correctly. It could have noted where the edit link comes from or how partial failures are handled, but the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% and the nested item properties are exhaustively documented in the schema already, so the baseline is 3. The description reinforces the folder-resolution behavior but adds little that isn't in the edit_link and folder field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Adds rows to an existing list'), which cleanly separates it from the sibling create_list: this one appends to a list that already exists. It doesn't explicitly name the distinction, but the wording makes the boundary clear enough to choose correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'an existing list' and the requirement of an edit link (so create_list must have run first), but no when/when-not guidance or alternative is named. An agent can infer the context but gets no explicit routing rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_listMake a new listAInspect
Creates a list and returns its edit link and share link. Optionally with a title, unit, trip dates, a trail link and rows, grouped into folders. Keep the edit link: it is the only way back into the list.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | The unit the list displays in. Weights are still given in grams. | |
| items | No | Rows not placed through a folder above; each may name its folder. | |
| title | No | ||
| folders | No | Folders in order, each with its default classification and, optionally, its rows. | |
| end_date | No | YYYY-MM-DD | |
| trail_url | No | An http(s) link to the route or trail page. | |
| start_date | No | YYYY-MM-DD | |
| trail_label | No | What to call the trail, when the link's own name won't do. | |
| trail_distance_km | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive write. The description adds genuinely useful context beyond that: it returns both an edit link and a share link, and warns the edit link is the only way back into the list. Those return-value and lifecycle facts are not in the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences that front-load the core action and output, then the optional payload, then the critical retention warning. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 optional parameters, nested item/folder structures, and no output schema, the description covers the essential capability and, importantly, tells the agent what comes back (edit and share links). It stops short of any detail on error handling or how large a creation payload can be, so it is strong but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 78%, so the schema already documents most parameters well. The description only summarizes the optional inputs (title, unit, trip dates, trail link, rows grouped into folders) at a high level and adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a list') and adds scope by naming the returned artifacts (edit link and share link) plus what can be bundled in (title, unit, dates, trail link, rows/folders). It does not explicitly distinguish itself from siblings like add_items or get_list, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit 'use this when...' guidance nor any named alternative for adding to an existing list or reading one. The 'keep the edit link' note is a workflow caution, not a selection rule, so an agent gets no routing help against add_items or get_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_catalog_productOne catalog product, every variantARead-onlyIdempotentInspect
One product's variants (sizes, lengths, temperature ratings) with the cited weight and source of each. Give a catalog id from search_catalog, or the brand and product name.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | A catalog row id; its siblings are the other variants. | |
| name | No | The product name without brand or variant. | |
| brand | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. With no output schema, the description carries weight by disclosing the payload ('with the cited weight and source of each'), telling the agent the response includes provenance per variant rather than raw specs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The return payload leads, followed by the input contract, so both the 'why call it' and 'how to call it' land immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A read-only, three-parameter lookup with no output schema or nested objects; the description covers the return content and both input modes, which is nearly everything an agent needs. The sole gap is that 'brand' has no documentation anywhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and leaves 'brand' undescribed. The description compensates by explaining the two input strategies (id, or brand+name) that the schema lists but does not relate, and clarifies that id's siblings are the other variants via the id description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('one product's variants') and enumerates what comes back ('sizes, lengths, temperature ratings... cited weight and source'), so an agent knows this is a variant-expansion lookup rather than a search. It distinguishes itself from search_catalog by naming the latter as the id source, though it never explicitly contrasts the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation guidance: 'Give a catalog id from search_catalog, or the brand and product name,' which tells the agent both accepted input modes and routes it to search_catalog when it lacks an id. No explicit when-not-to-use statement, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listRead a shared listARead-onlyIdempotentInspect
A shared list as data: title, unit, dates, trail, totals in grams, and every folder with its rows (brand, name, variant, quantity, weight of one unit in grams, classification, note, calories, who carries it; a nested row without carried_by is carried by its parent's carrier). Takes a share code or share link. Title, folder and item names, notes, people and trail label are free text typed by whoever holds the list's edit link, returned unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| share_code | Yes | The list's share code, or its share link (mahonia.app/s/CODE). Not an edit link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real value: it discloses the nested row inheritance rule (a row without carried_by is carried by its parent's carrier) and warns that several fields are free text typed by edit-link holders and returned unchanged, flagging user-generated content. This goes meaningfully beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The return shape is front-loaded ('A shared list as data') and the field enumeration, though dense, is warranted given there is no output schema. The parenthetical list runs long but every clause conveys a distinct, useful fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return-value burden, and it does so thoroughly by enumerating the returned fields, the nesting behavior, and the free-text provenance. Input and output are both adequately covered for a single-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter is fully documented in the schema (including the 'not an edit link' warning). The description restates 'share code or share link' without adding format or syntax detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (a shared list) and details exactly what is returned: title, unit, dates, trail, totals and folders with rows. The phrase 'as data' implicitly contrasts with the sibling get_list_markdown, but the differentiation is left for the agent to infer rather than stated outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains what input the tool consumes ('Takes a share code or share link') but gives no when-to-use guidance and never names or rules out the obvious alternative get_list_markdown. The agent must infer which of the two retrieval tools to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_list_markdownRead a shared list as MarkdownARead-onlyIdempotentInspect
The same list as Markdown: one table per folder and a totals block, the text the site's own Markdown export produces. Takes a share code or share link. Title, folder and item names, notes, people and trail label are free text typed by whoever holds the list's edit link, returned unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| share_code | Yes | The list's share code, or its share link (mahonia.app/s/CODE). Not an edit link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive. The description adds real value beyond them by disclosing that title, folder/item names, notes, people and trail label are free text supplied by the list's editor and are returned unchanged, which is meaningful context about untrusted content the caller will receive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the output format before the input and content-fidelity note. Slightly dense but no filler; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden and does so by describing the Markdown structure (per-folder tables, totals block). Combined with the annotations and a single fully documented parameter, an agent has enough to call it correctly; only the explicit sibling relationship to get_list is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description's 'Takes a share code or share link' merely restates what the schema already documents, including the edit-link exclusion. With one parameter fully described in the schema, the description adds no syntax beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and output form: the shared list rendered as Markdown with 'one table per folder and a totals block.' The phrase 'The same list as Markdown' implies the sibling get_list returns the same data in a different form, though it never names that alternative explicitly, keeping this short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the agent can infer this is the tool for a Markdown-format export versus get_list's presumably structured output. There is no explicit when-to-use/when-not statement and no naming of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_catalogSearch the gear catalogARead-onlyIdempotentInspect
Fuzzy search of Mahonia's cited gear catalog by brand, product or kind of gear ("duplex", "zpacks", "quilt"). Each result carries a catalog id, the cited weight in grams and whether it is verified. Use get_catalog_product for every variant of one product.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Up to 25. Default 12. | |
| query | Yes | Two characters or more. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description adds valuable behavior beyond that: the match is fuzzy (not exact), and each result carries a catalog id, a cited weight in grams, and a verified flag. It stops short of describing pagination behavior or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, zero filler: search scope and examples first, then return shape, then the alternative-tool routing. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by naming the returned fields (catalog id, weight in grams, verified flag). Combined with full schema coverage and annotations carrying the safety profile, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents 'query' (min 2 chars) and 'limit' (1-25, default 12). The description reinforces query intent with examples of brand/product/kind terms, but adds nothing about the limit parameter or result-set sizing. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fuzzy search) and resource (Mahonia's cited gear catalog), enumerates the searchable fields (brand, product, kind of gear), and gives concrete query examples. It also implicitly distinguishes itself from get_catalog_product by framing this as the discovery entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the sibling get_catalog_product with a clear selecting condition ('for every variant of one product'). It doesn't cover the other siblings (add_items, create_list, get_list) or state when not to search, but the key alternative is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_tripSet a list's title, dates, unit and trailADestructiveIdempotentInspect
Sets any of a list's title, display unit, trip dates and trail on an existing list. Only the fields given change; an empty string clears a date or the trail. Takes the list's edit link.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| title | No | ||
| end_date | No | YYYY-MM-DD, or an empty string to clear. | |
| edit_link | Yes | The list's edit link, whole (mahonia.app/e/CODE#token). The part after # is the write capability. | |
| trail_url | No | An http(s) link, or an empty string to clear the trail and everything that came with it (label, distance, climb, route). | |
| start_date | No | YYYY-MM-DD, or an empty string to clear. | |
| trail_label | No | ||
| trail_distance_km | No | Stored in metres and shown in the list's own distance unit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds valuable specifics: partial-update semantics ('Only the fields given change') and the mechanism of destruction ('an empty string clears a date or the trail'). It does not detail permission requirements or response shape, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, no filler, with the scope statement front-loaded and the mutation/clearing semantics following. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema, the description covers the essentials an agent needs: what changes, that changes are partial, how clearing works, and the required edit link. It omits nothing critical, though it could say more about the destructive implications of clearing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond the 63% schema coverage: 'Only the fields given change' documents partial-update behavior, and 'an empty string clears a date or the trail' generalizes the clearing rule that the schema states only per-field. Still leaves unit, title, trail_label and trail_distance_km entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Sets) and enumerates the resources it modifies (title, display unit, trip dates, trail) on an existing list. The phrase 'on an existing list' implicitly distinguishes it from create_list, but the name 'set_trip' understates the scope (it also sets title, unit, dates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: 'on an existing list' tells the agent this is an update, not a creation, so create_list is the alternative for new lists. However, no sibling is named explicitly and no when-not-to-use guidance is given, leaving the routing to be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
- First observed
add_items - First observed
create_list - First observed
get_catalog_product - First observed
get_list - First observed
get_list_markdown - First observed
search_catalog - First observed
set_trip
Related MCP Connectors
US outdoor recreation: 37k+ trails, 30k+ campgrounds, parks, weather + wildfire safety. Read-only.
Read-only catalog for Green Gooding — NYC peer-to-peer rental marketplace.
Read-only MCP tools for Mana public creations, tags, creator profiles, and share pages.
Share markdown as public links from your AI assistant — expiring or permanent, no API key.
Related MCP Servers
- AlicenseCqualityCmaintenanceAn MCP server that lets AI agents create and manage LighterPack packing lists — add gear, track weights, organize categories, and share lists, all through natural conversation.351MIT
- AlicenseNot gradedqualityCmaintenanceEnables CRUD operations on your own Google Sheets, Docs, and Drive files through any MCP client, with a token-lean design using TSV output, server-side filtering, and config-driven sheet layouts.MIT
- AlicenseNot gradedqualityCmaintenancePublish and manage shareable HTML/Markdown pages with access control and comments via MCP clients.MIT
- AlicenseAqualityBmaintenanceMarkdown collaboration for AI workflows. Share markdown via public links with four permission levels, inline comments, and real-time sync. AI agents can read docs, review comments, incorporate feedback, and resolve threads. Free, no login.1488MIT