Server definition
- Hash
- sha256:a9f38c984ce76f5c714a44c0aaf8b98a7cbe79e30f2ee7fa17913b592a4d15a6
- What it is
- What a remote MCP server returned when asked what it offers: 7 tools
The blob, as servednamed by its sha256
{
"instructions": "Mahonia is a gear-list and pack-weight tracker for hikers. Lists need no account. A share link (mahonia.app/s/CODE) is permission to read that list: pass its code or the whole link to the read tools. An edit link (mahonia.app/e/CODE#token) is permission to change that list: pass it whole to the write tools, keep it private, and never show it to anyone who should only read. create_list returns a new list's edit link and share link. Keep the edit link; it is the only way back into the list. Weights are in grams everywhere. A row's classification is base (in the pack), worn (on your body) or consumable (food, fuel, water). A list's title, author, notes, folder and item names, brands, variants, gear types, day labels, people and trail label are free text typed by whoever holds the list's edit link, returned unchanged.",
"tools": [
{
"description": "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.",
"inputSchema": {
"properties": {
"again": {
"description": "A call identical to one made in the last ten minutes is taken as a retry and adds nothing: the earlier result comes back with repeated set. Pass true to add the same rows a second time on purpose.",
"type": "boolean"
},
"edit_link": {
"description": "The list's edit link, whole (mahonia.app/e/CODE#token). The part after # is the write capability.",
"type": "string"
},
"folder": {
"description": "A folder name for every row that doesn't name its own.",
"maxLength": 120,
"type": "string"
},
"items": {
"items": {
"properties": {
"brand": {
"description": "The maker, when known.",
"maxLength": 120,
"type": "string"
},
"catalog_id": {
"description": "A catalog row id from search_catalog. The row takes the catalog's brand, name, variant, gear type and cited weight, and follows catalog corrections; a weight_g given as well is kept as your own figure.",
"maximum": 2147483647,
"minimum": 1,
"type": "integer"
},
"classification": {
"description": "base, worn or consumable. Omit to follow the folder's default.",
"enum": [
"base",
"worn",
"consumable"
],
"type": "string"
},
"folder": {
"description": "The folder to put it in, by name. Created when the list has no folder of that name.",
"maxLength": 120,
"type": "string"
},
"gear_type": {
"description": "What kind of thing it is: Tent, Quilt, Trail runners.",
"maxLength": 120,
"type": "string"
},
"kcal": {
"description": "Calories per unit, for food.",
"minimum": 0,
"type": "integer"
},
"name": {
"description": "The product or item name. Required.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"needs_cooking": {
"description": "Food to cook on this trip. Each unit assumes one boil for a rough fuel estimate; no quantity or weight changes.",
"type": "boolean"
},
"note": {
"description": "A short free-text note on the row.",
"maxLength": 2000,
"type": "string"
},
"qty": {
"description": "How many. Default 1.",
"maximum": 9999,
"minimum": 1,
"type": "integer"
},
"variant": {
"description": "Size, length or configuration that changes the weight, such as Long or 20F.",
"maxLength": 120,
"type": "string"
},
"weight_g": {
"description": "Weight of ONE unit, in grams. Omit when unknown; the list keeps working without it, and a row with a catalog_id takes the catalog's cited weight.",
"minimum": 0,
"type": "number"
},
"worn_qty": {
"description": "Of qty, how many are worn rather than carried (three pairs of socks, one on your feet). For a row that is entirely worn, set classification to worn instead.",
"minimum": 0,
"type": "integer"
}
},
"required": [
"name"
],
"type": "object"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"edit_link",
"items"
],
"type": "object"
},
"name": "add_items",
"outputSchema": {
"properties": {
"added": {
"description": "Rows added.",
"type": "integer"
},
"folders_made": {
"description": "Folders that didn't exist and were made for these rows.",
"items": {
"description": "User text.",
"type": "string"
},
"type": "array"
},
"repeated": {
"description": "True when this call repeated one made in the last ten minutes: nothing was added again, and the figures are that call's. Pass again: true to add the rows a second time.",
"type": "boolean"
},
"share_link": {
"type": "string"
},
"totals": {
"description": "Whole grams, summed over every row of the list.",
"properties": {
"base_g": {
"description": "In the pack, consumables aside.",
"type": "integer"
},
"carried_g": {
"description": "base_g plus consumable_g: what is on your back.",
"type": "integer"
},
"consumable_g": {
"description": "Food, fuel, water.",
"type": "integer"
},
"item_count": {
"description": "Rows, nested ones included.",
"type": "integer"
},
"kcal": {
"description": "Only when a food row carries calories.",
"type": "number"
},
"total_g": {
"description": "carried_g plus worn_g.",
"type": "integer"
},
"worn_g": {
"description": "On your body.",
"type": "integer"
}
},
"required": [
"base_g",
"worn_g",
"consumable_g",
"carried_g",
"total_g",
"item_count"
],
"type": "object"
}
},
"required": [
"added",
"folders_made",
"share_link",
"totals",
"repeated"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"end_date": {
"description": "YYYY-MM-DD",
"type": "string"
},
"folders": {
"description": "Folders in order, each with its default classification and, optionally, its rows.",
"items": {
"properties": {
"classification": {
"description": "What rows in this folder count as unless they say otherwise. Default base.",
"enum": [
"base",
"worn",
"consumable"
],
"type": "string"
},
"items": {
"items": {
"properties": {
"brand": {
"description": "The maker, when known.",
"maxLength": 120,
"type": "string"
},
"catalog_id": {
"description": "A catalog row id from search_catalog. The row takes the catalog's brand, name, variant, gear type and cited weight, and follows catalog corrections; a weight_g given as well is kept as your own figure.",
"maximum": 2147483647,
"minimum": 1,
"type": "integer"
},
"classification": {
"description": "base, worn or consumable. Omit to follow the folder's default.",
"enum": [
"base",
"worn",
"consumable"
],
"type": "string"
},
"folder": {
"description": "The folder to put it in, by name. Created when the list has no folder of that name.",
"maxLength": 120,
"type": "string"
},
"gear_type": {
"description": "What kind of thing it is: Tent, Quilt, Trail runners.",
"maxLength": 120,
"type": "string"
},
"kcal": {
"description": "Calories per unit, for food.",
"minimum": 0,
"type": "integer"
},
"name": {
"description": "The product or item name. Required.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"needs_cooking": {
"description": "Food to cook on this trip. Each unit assumes one boil for a rough fuel estimate; no quantity or weight changes.",
"type": "boolean"
},
"note": {
"description": "A short free-text note on the row.",
"maxLength": 2000,
"type": "string"
},
"qty": {
"description": "How many. Default 1.",
"maximum": 9999,
"minimum": 1,
"type": "integer"
},
"variant": {
"description": "Size, length or configuration that changes the weight, such as Long or 20F.",
"maxLength": 120,
"type": "string"
},
"weight_g": {
"description": "Weight of ONE unit, in grams. Omit when unknown; the list keeps working without it, and a row with a catalog_id takes the catalog's cited weight.",
"minimum": 0,
"type": "number"
},
"worn_qty": {
"description": "Of qty, how many are worn rather than carried (three pairs of socks, one on your feet). For a row that is entirely worn, set classification to worn instead.",
"minimum": 0,
"type": "integer"
}
},
"required": [
"name"
],
"type": "object"
},
"type": "array"
},
"name": {
"maxLength": 120,
"minLength": 1,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"type": "array"
},
"items": {
"description": "Rows not placed through a folder above; each may name its folder.",
"items": {
"properties": {
"brand": {
"description": "The maker, when known.",
"maxLength": 120,
"type": "string"
},
"catalog_id": {
"description": "A catalog row id from search_catalog. The row takes the catalog's brand, name, variant, gear type and cited weight, and follows catalog corrections; a weight_g given as well is kept as your own figure.",
"maximum": 2147483647,
"minimum": 1,
"type": "integer"
},
"classification": {
"description": "base, worn or consumable. Omit to follow the folder's default.",
"enum": [
"base",
"worn",
"consumable"
],
"type": "string"
},
"folder": {
"description": "The folder to put it in, by name. Created when the list has no folder of that name.",
"maxLength": 120,
"type": "string"
},
"gear_type": {
"description": "What kind of thing it is: Tent, Quilt, Trail runners.",
"maxLength": 120,
"type": "string"
},
"kcal": {
"description": "Calories per unit, for food.",
"minimum": 0,
"type": "integer"
},
"name": {
"description": "The product or item name. Required.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"needs_cooking": {
"description": "Food to cook on this trip. Each unit assumes one boil for a rough fuel estimate; no quantity or weight changes.",
"type": "boolean"
},
"note": {
"description": "A short free-text note on the row.",
"maxLength": 2000,
"type": "string"
},
"qty": {
"description": "How many. Default 1.",
"maximum": 9999,
"minimum": 1,
"type": "integer"
},
"variant": {
"description": "Size, length or configuration that changes the weight, such as Long or 20F.",
"maxLength": 120,
"type": "string"
},
"weight_g": {
"description": "Weight of ONE unit, in grams. Omit when unknown; the list keeps working without it, and a row with a catalog_id takes the catalog's cited weight.",
"minimum": 0,
"type": "number"
},
"worn_qty": {
"description": "Of qty, how many are worn rather than carried (three pairs of socks, one on your feet). For a row that is entirely worn, set classification to worn instead.",
"minimum": 0,
"type": "integer"
}
},
"required": [
"name"
],
"type": "object"
},
"type": "array"
},
"start_date": {
"description": "YYYY-MM-DD",
"type": "string"
},
"title": {
"maxLength": 200,
"type": "string"
},
"trail_distance_km": {
"minimum": 0,
"type": "number"
},
"trail_label": {
"description": "What to call the trail, when the link's own name won't do.",
"maxLength": 120,
"type": "string"
},
"trail_url": {
"description": "An http(s) link to the route or trail page.",
"maxLength": 2000,
"type": "string"
},
"unit": {
"description": "The unit the list displays in. Weights are in grams regardless.",
"enum": [
"g",
"kg",
"oz",
"lb"
],
"type": "string"
}
},
"type": "object"
},
"name": "create_list",
"outputSchema": {
"properties": {
"edit_link": {
"description": "The write capability. Keep it; it is the only way back into the list.",
"type": "string"
},
"folders": {
"description": "Folders made.",
"type": "integer"
},
"items": {
"description": "Rows made.",
"type": "integer"
},
"share_code": {
"type": "string"
},
"share_link": {
"description": "The read capability, safe to pass on.",
"type": "string"
},
"title": {
"description": "User text.",
"type": "string"
},
"totals": {
"description": "Whole grams, summed over every row of the list.",
"properties": {
"base_g": {
"description": "In the pack, consumables aside.",
"type": "integer"
},
"carried_g": {
"description": "base_g plus consumable_g: what is on your back.",
"type": "integer"
},
"consumable_g": {
"description": "Food, fuel, water.",
"type": "integer"
},
"item_count": {
"description": "Rows, nested ones included.",
"type": "integer"
},
"kcal": {
"description": "Only when a food row carries calories.",
"type": "number"
},
"total_g": {
"description": "carried_g plus worn_g.",
"type": "integer"
},
"worn_g": {
"description": "On your body.",
"type": "integer"
}
},
"required": [
"base_g",
"worn_g",
"consumable_g",
"carried_g",
"total_g",
"item_count"
],
"type": "object"
}
},
"required": [
"title",
"edit_link",
"share_link",
"share_code",
"folders",
"items",
"totals"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"brand": {
"type": "string"
},
"id": {
"description": "A catalog row id; its siblings are the other variants.",
"minimum": 1,
"type": "integer"
},
"name": {
"description": "The product name without brand or variant.",
"type": "string"
}
},
"type": "object"
},
"name": "get_catalog_product",
"outputSchema": {
"properties": {
"brand": {
"type": [
"string",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
},
"gear_type": {
"type": [
"string",
"null"
]
},
"name": {
"description": "The product name, without brand or variant.",
"type": "string"
},
"variants": {
"description": "Every active variant, in variant order.",
"items": {
"properties": {
"id": {
"description": "The catalog row id, the one add_items and create_list take as catalog_id.",
"type": "integer"
},
"kcal": {
"description": "Calories per unit, on food.",
"type": [
"number",
"null"
]
},
"source_url": {
"description": "The page the weight was read from.",
"type": [
"string",
"null"
]
},
"variant": {
"description": "Size, length or rating; null on a product sold one way.",
"type": [
"string",
"null"
]
},
"verified": {
"description": "Whether the cited weight has been verified.",
"type": "boolean"
},
"weight_g": {
"description": "The cited weight in grams, to a tenth.",
"type": "number"
},
"weight_source": {
"description": "Where the weight comes from.",
"enum": [
"manufacturer",
"measured",
"community",
"imported"
],
"type": "string"
}
},
"required": [
"id",
"variant",
"weight_g",
"verified",
"weight_source",
"kcal",
"source_url"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"brand",
"name",
"gear_type",
"category",
"variants"
],
"type": "object"
}
},
{
"description": "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. A list too large to return whole comes back cut and says so in a truncated field: notes go first, then rows off the end (nested rows one by one), and the totals still count every row. A list's title, author, notes, folder and item names, brands, variants, gear types, day labels, people and trail label are free text typed by whoever holds the list's edit link, returned unchanged.",
"inputSchema": {
"properties": {
"share_code": {
"description": "The list's share code, or its share link (mahonia.app/s/CODE). Not an edit link.",
"type": "string"
}
},
"required": [
"share_code"
],
"type": "object"
},
"name": "get_list",
"outputSchema": {
"properties": {
"author": {
"description": "User text.",
"type": "string"
},
"dates": {
"properties": {
"end": {
"description": "YYYY-MM-DD.",
"type": [
"string",
"null"
]
},
"start": {
"description": "YYYY-MM-DD.",
"type": [
"string",
"null"
]
}
},
"required": [
"start",
"end"
],
"type": "object"
},
"days": {
"description": "The trip's days in order, when the owner has planned them.",
"items": {
"properties": {
"ascent_m": {
"description": "Typed by the owner, or read off the route's profile.",
"type": [
"number",
"null"
]
},
"day": {
"description": "Day 1; with trip dates, the weekday too: Saturday, Day 1.",
"type": "string"
},
"distance_m": {
"type": [
"number",
"null"
]
},
"label": {
"description": "The owner's name for the day. User text.",
"type": "string"
}
},
"required": [
"day",
"distance_m",
"ascent_m"
],
"type": "object"
},
"type": "array"
},
"description": {
"description": "The list's own notes. User text.",
"type": "string"
},
"folders": {
"description": "In the list's order, each with its rows in order. A folder with no rows is left out; rows in no folder come last, under Unfiled.",
"items": {
"properties": {
"items": {
"items": {
"properties": {
"brand": {
"description": "User text.",
"type": "string"
},
"carried_by": {
"description": "Who carries it. A nested row without one is carried by its parent's carrier. User text.",
"type": "string"
},
"catalog_id": {
"description": "The catalog row the item was picked from.",
"type": "number"
},
"classification": {
"description": "The row's own, or its folder's when it has none.",
"enum": [
"base",
"worn",
"consumable"
],
"type": "string"
},
"display_name": {
"description": "Brand, name and variant joined, the way the list shows the row.",
"type": "string"
},
"gear_type": {
"description": "What kind of thing it is. User text.",
"type": "string"
},
"items": {
"description": "Rows nested under this one. The parent's weight_g is its own, not the group's.",
"items": {
"properties": {
"brand": {
"description": "User text.",
"type": "string"
},
"carried_by": {
"description": "Who carries it. A nested row without one is carried by its parent's carrier. User text.",
"type": "string"
},
"catalog_id": {
"description": "The catalog row the item was picked from.",
"type": "number"
},
"classification": {
"description": "The row's own, or its folder's when it has none.",
"enum": [
"base",
"worn",
"consumable"
],
"type": "string"
},
"display_name": {
"description": "Brand, name and variant joined, the way the list shows the row.",
"type": "string"
},
"gear_type": {
"description": "What kind of thing it is. User text.",
"type": "string"
},
"kcal": {
"description": "Calories per unit.",
"type": "number"
},
"name": {
"description": "The product name, without brand or variant. User text.",
"type": "string"
},
"needs_cooking": {
"description": "Food marked for cooking on this trip.",
"type": "boolean"
},
"note": {
"description": "User text.",
"type": "string"
},
"qty": {
"description": "How many; weight_g is for one.",
"type": "number"
},
"variant": {
"description": "Size, length or configuration. User text.",
"type": "string"
},
"weight_g": {
"description": "One unit, in grams to a tenth. 0 when the row has no weight.",
"type": "number"
},
"worn_qty": {
"description": "Of qty, how many are worn rather than carried.",
"type": "number"
}
},
"required": [
"name",
"display_name",
"qty",
"weight_g",
"classification"
],
"type": "object"
},
"type": "array"
},
"kcal": {
"description": "Calories per unit.",
"type": "number"
},
"name": {
"description": "The product name, without brand or variant. User text.",
"type": "string"
},
"needs_cooking": {
"description": "Food marked for cooking on this trip.",
"type": "boolean"
},
"note": {
"description": "User text.",
"type": "string"
},
"qty": {
"description": "How many; weight_g is for one.",
"type": "number"
},
"variant": {
"description": "Size, length or configuration. User text.",
"type": "string"
},
"weight_g": {
"description": "One unit, in grams to a tenth. 0 when the row has no weight.",
"type": "number"
},
"worn_qty": {
"description": "Of qty, how many are worn rather than carried.",
"type": "number"
}
},
"required": [
"name",
"display_name",
"qty",
"weight_g",
"classification"
],
"type": "object"
},
"type": "array"
},
"name": {
"description": "User text.",
"type": "string"
}
},
"required": [
"name",
"items"
],
"type": "object"
},
"type": "array"
},
"people": {
"description": "The people who carry the list's rows, when it names any.",
"items": {
"description": "User text.",
"type": "string"
},
"type": "array"
},
"share_code": {
"description": "The list's share code, the read capability.",
"type": "string"
},
"share_link": {
"description": "The list's share link.",
"type": "string"
},
"title": {
"description": "User text.",
"type": "string"
},
"totals": {
"description": "Whole grams, summed over every row of the list.",
"properties": {
"base_g": {
"description": "In the pack, consumables aside.",
"type": "integer"
},
"carried_g": {
"description": "base_g plus consumable_g: what is on your back.",
"type": "integer"
},
"consumable_g": {
"description": "Food, fuel, water.",
"type": "integer"
},
"item_count": {
"description": "Rows, nested ones included.",
"type": "integer"
},
"kcal": {
"description": "Only when a food row carries calories.",
"type": "number"
},
"total_g": {
"description": "carried_g plus worn_g.",
"type": "integer"
},
"worn_g": {
"description": "On your body.",
"type": "integer"
}
},
"required": [
"base_g",
"worn_g",
"consumable_g",
"carried_g",
"total_g",
"item_count"
],
"type": "object"
},
"trail": {
"properties": {
"ascent_m": {
"type": [
"number",
"null"
]
},
"descent_m": {
"type": [
"number",
"null"
]
},
"distance_m": {
"type": [
"number",
"null"
]
},
"label": {
"description": "User text.",
"type": [
"string",
"null"
]
},
"url": {
"type": [
"string",
"null"
]
}
},
"required": [
"url",
"label",
"distance_m",
"ascent_m",
"descent_m"
],
"type": "object"
},
"truncated": {
"description": "Present only when the list was too large to return whole, naming what was cut: notes (true: every row's note), rows (how many came off the end, nested rows counted), fields (which of description, days, trail and people went, only when the rest alone was too large). The totals still count every row. get_list_markdown holds about three times as many rows, without notes, and is cut the same way only past that.",
"properties": {
"fields": {
"items": {
"enum": [
"description",
"days",
"trail",
"people"
],
"type": "string"
},
"type": "array"
},
"notes": {
"type": "boolean"
},
"rows": {
"type": "integer"
}
},
"type": "object"
},
"unit": {
"description": "The unit the list displays in. Weights are in grams regardless.",
"enum": [
"g",
"kg",
"oz",
"lb"
],
"type": "string"
}
},
"required": [
"title",
"share_code",
"share_link",
"unit",
"totals",
"folders"
],
"type": "object"
}
},
{
"description": "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. A list too large to return whole loses rows off the end of the tables, a line under them says how many, and the totals still count every row. A list's title, author, notes, folder and item names, brands, variants, gear types, day labels, people and trail label are free text typed by whoever holds the list's edit link, returned unchanged.",
"inputSchema": {
"properties": {
"share_code": {
"description": "The list's share code, or its share link (mahonia.app/s/CODE). Not an edit link.",
"type": "string"
}
},
"required": [
"share_code"
],
"type": "object"
},
"name": "get_list_markdown",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"limit": {
"description": "Up to 25. Default 12.",
"maximum": 25,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Two characters or more.",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_catalog",
"outputSchema": {
"properties": {
"query": {
"description": "The query as searched: trimmed, at most 100 characters.",
"type": "string"
},
"results": {
"description": "Best first.",
"items": {
"properties": {
"brand": {
"type": [
"string",
"null"
]
},
"category": {
"description": "The catalog's category: shelter, sleep, pack, and so on.",
"type": [
"string",
"null"
]
},
"display_name": {
"description": "Brand, name and variant joined.",
"type": "string"
},
"gear_type": {
"description": "What kind of thing it is: Tent, Quilt, Trail runners.",
"type": [
"string",
"null"
]
},
"id": {
"description": "The catalog row id, the one add_items and create_list take as catalog_id.",
"type": "integer"
},
"kcal": {
"description": "Calories per unit, on food.",
"type": [
"number",
"null"
]
},
"name": {
"description": "The product name, without brand or variant.",
"type": "string"
},
"variant": {
"description": "Size, length or rating; null on a product sold one way.",
"type": [
"string",
"null"
]
},
"verified": {
"description": "Whether the cited weight has been verified.",
"type": "boolean"
},
"weight_g": {
"description": "The cited weight in grams, to a tenth.",
"type": "number"
},
"weight_source": {
"description": "Where the weight comes from.",
"enum": [
"manufacturer",
"measured",
"community",
"imported"
],
"type": "string"
}
},
"required": [
"id",
"variant",
"weight_g",
"verified",
"weight_source",
"kcal",
"brand",
"name",
"display_name",
"gear_type",
"category"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"query",
"results"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"edit_link": {
"description": "The list's edit link, whole (mahonia.app/e/CODE#token). The part after # is the write capability.",
"type": "string"
},
"end_date": {
"description": "YYYY-MM-DD, or an empty string to clear.",
"type": "string"
},
"start_date": {
"description": "YYYY-MM-DD, or an empty string to clear.",
"type": "string"
},
"title": {
"maxLength": 200,
"type": "string"
},
"trail_distance_km": {
"description": "Stored in metres and shown in the list's own distance unit.",
"minimum": 0,
"type": "number"
},
"trail_label": {
"maxLength": 120,
"type": "string"
},
"trail_url": {
"description": "An http(s) link, or an empty string to clear the trail and everything that came with it (label, distance, climb, route).",
"maxLength": 2000,
"type": "string"
},
"unit": {
"description": "The unit the list displays in. Weights are in grams regardless.",
"enum": [
"g",
"kg",
"oz",
"lb"
],
"type": "string"
}
},
"required": [
"edit_link"
],
"type": "object"
},
"name": "set_trip",
"outputSchema": {
"properties": {
"dates": {
"properties": {
"end": {
"description": "YYYY-MM-DD.",
"type": [
"string",
"null"
]
},
"start": {
"description": "YYYY-MM-DD.",
"type": [
"string",
"null"
]
}
},
"required": [
"start",
"end"
],
"type": [
"object",
"null"
]
},
"share_link": {
"type": "string"
},
"title": {
"description": "User text.",
"type": "string"
},
"trail": {
"properties": {
"ascent_m": {
"type": [
"number",
"null"
]
},
"descent_m": {
"type": [
"number",
"null"
]
},
"distance_m": {
"type": [
"number",
"null"
]
},
"label": {
"description": "User text.",
"type": [
"string",
"null"
]
},
"url": {
"type": [
"string",
"null"
]
}
},
"required": [
"url",
"label",
"distance_m",
"ascent_m",
"descent_m"
],
"type": [
"object",
"null"
]
},
"unit": {
"description": "The unit the list displays in. Weights are in grams regardless.",
"enum": [
"g",
"kg",
"oz",
"lb"
],
"type": "string"
}
},
"required": [
"title",
"unit",
"dates",
"trail",
"share_link"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:a9f38c984ce76f5c714a44c0aaf8b98a7cbe79e30f2ee7fa17913b592a4d15a6 | sha256sum