Skip to main content
Glama

Server Details

Travel notebook your AI agent writes from your photos and remarks over MCP.

Ownership verified
Status
Healthy
Uptime
61.1% over 38 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A3.7/5.0

Scored across 30 tools

Disambiguation5/5

Each tool targets a distinct resource and action: uploads, media, remarks, timeline blocks, share links, and trip settings are cleanly separated. Even the several link-related tools (share vs upload vs show) have clearly different purposes and lifecycles.

Naming Consistency4/5

The vast majority use a clear snake_case verb_noun pattern (create_trip, update_media, list_remarks, revoke_share_link). Minor deviations like account_status, learn, and search keep it from being perfectly uniform, but the convention is highly predictable overall.

Tool Count2/5

Thirty tools is above the 25+ threshold and feels heavy for the apparent scope. While the domain is fairly broad, many tools could be consolidated, such as the three set_trip_* tools or the separate share/upload link operations.

Completeness3/5

The toolkit covers the main creation, reading, and updating workflows for trips, media, timeline blocks, and remarks. However, there are notable lifecycle gaps: no way to delete a trip, media item, timeline block, or remark, which leaves agents unable to undo mistakes or remove content.

Available Tools

53 tools
account_statusAccount statusA
Read-only
Inspect

This account's tier and quota usage. Check before large batch uploads so you can warn at the wall instead of failing halfway; also answers 'how much room do I have left'. A cap of null means unlimited on this tier.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation read-only, and the description adds meaningful context: the tool reports tier, quota usage, and the special meaning of a null cap (unlimited). It does not describe exact response fields, but for a simple read-only status tool the added context is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The core purpose is front-loaded, followed by a concrete usage trigger and the one non-obvious semantic detail (null cap). Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only tool with no output schema, the description covers what it reports (tier and quota usage), why to call it (pre-flight check), and how to interpret an important value (null cap). It is complete enough for an agent to decide when to call it, though exact response fields are not enumerated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so there is no schema burden. The description goes beyond schema by explaining the meaning of the cap field (null means unlimited), which helps interpret results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly identifies the tool as reporting this account's tier and quota usage, with a specific use case (checking before large batch uploads). It distinguishes itself from sibling tools, none of which report account status or quota.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to check it: before large batch uploads, to warn at the quota wall rather than failing midway, and to answer 'how much room do I have left'. No exclusion or alternative is needed since no sibling tool serves this role.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_blockAdd to timelineAInspect

Add one block to a trip's timeline. This is the only way to write to a timeline; a DAY_MARKER block separates days. Layouts and their payload shapes: learn('block_types').

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesSee learn('block_types/<TYPE>').
badgeNoA short label for what kind of moment this is — a meal, a museum, checking in. Shown to readers, so name the occasion, not the data.
payloadYesContent for this layout; shape depends on type. title / subtitle / text / caption / facts / badge are printed on the page and read by people who were not there, so write them in the traveller's language, not English. No field names or debugging traces, and no coordinates — the share page withholds those on purpose. The worked examples in learn('block_types') are written in English only to show the shape of each payload; your text goes in the traveller's language. See learn('voice').
trip_idYes(must not be empty)
sort_keyNoManual ordering override; defaults to occurred_at_utc.
client_idYesYour own key for this block, so a retry does not create a duplicate. (must not be empty)
tz_offsetNoMinutes east of UTC; defaults to the trip's own offset.
occurred_at_utcYesWhen this happened, epoch milliseconds UTC. Orders the timeline.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are all false (not read-only, not idempotent, not destructive), and the description does not contradict them. It adds useful behavioral context: the DAY_MARKER rule for separating days and the fact that this is the sole write mechanism. It doesn't disclose retry semantics, but those are implied by idempotentHint=false and the client_id param in the schema. This is a reasonable amount of added context 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The purpose is front-loaded, the key domain rule (DAY_MARKER) is included, and the reference to learn is concise. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 params, a nested payload object, and an enum, the description is concise but sufficient because it defers to learn('block_types') for the complex payload details. It doesn't describe return values, but there's no output schema, so that's not required. It covers the core action and provides a clear path to the necessary knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter described, so the schema carries the heavy lifting. The description adds value by pointing to learn('block_types') for payload shapes, which directly addresses the most complex parameter (payload). It also implicitly reinforces the client_id deduplication purpose by mentioning 'only way to write,' though it doesn't restate the schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Add'), resource ('block'), and scope ('to a trip's timeline'). It also declares 'This is the only way to write to a timeline,' which distinguishes it from read-only siblings like get_timeline and update_block. This makes the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly establishes when to use this tool: 'This is the only way to write to a timeline.' It also directs the agent to learn('block_types') for layout specifics, which is a clear pointer for payload construction. It doesn't mention alternatives for updating existing blocks, but given that it's the only write path, 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.

archive_personArchive personInspect

Archive a person with expected_version, preserving historical relationships. Self cannot be archived.

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYes(must not be empty, at most 200 characters)
expected_versionYes(≥1)
capture_remarkSave the traveller's words verbatimInspect

Write down what the traveller just said, verbatim. Remarks are the raw record of their words - about a photo, a meal, the trip itself - kept exactly as said. Do not polish, summarise or translate. Give trip_id (and media_ids if the words are about specific photos) when you know them; otherwise the remark waits in the pending pool for you to file later with file_remark.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe traveller's own words, exactly as said. Not a transcript of recorded audio - video speech-to-text lives on its own field, written by transcribe_video.
trip_idNoOmit if you do not know yet; file_remark can set it later.
media_idsNoThe photos these words are about, if any.
tz_offsetNoMinutes east of UTC where they said it, e.g. 540 for Tokyo, -300 for New York. Defaults to the trip's own offset.
location_nameNoWhere they were, in their words.
occurred_at_utcNoEpoch milliseconds UTC. Defaults to now - use it when they are recalling something earlier.
speaker_person_idNo(must not be empty)
confirm_uploadFile an uploadInspect

Step two: the bytes are up, now file the media. A description is required — an entry with no words is not worth keeping. Pass the EXIF you parsed locally as structured fields. See learn('recipes/exif') for what each source value means.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoNoReverse-geocoded place. Normally you leave this out — send lat/lng and the server fills it. Kept separately from location_name. See learn('recipes/geocode').
latNo
lngNo
exifNoAny remaining EXIF fields, as JSON.
creditNoRequired when provenance is 'reference'.
sourceNoWhere this came in from, e.g. 'agent' or 'shortcut'.
keywordsNoSpace-separated search terms, in the traveller's language.
media_idYesFrom request_upload. (must not be empty)
tz_offsetNoMinutes east of UTC at the place of capture (Tokyo 540, Paris 120).
tz_sourceNoWhere tz_offset came from. 'assumed' means guessed from your own clock. See learn('recipes/exif').
provenanceNo'reference' means someone else's picture and requires credit.
descriptionYesWhat this shows. People read it — the traveller years from now, and friends who open the share link — so write it in the language the traveller speaks, not English. Be concrete: name the dish, the street, the light. (must not be empty)
exif_sourceNo
orientationNoEXIF Orientation, 1-8.
location_nameNoWhat the traveller calls this place — a venue or landmark, not an administrative area.
occurred_at_utcNoCapture time, epoch milliseconds UTC.
contributor_person_idNo(must not be empty)
create_experienceSave experienceInspect

Save a user-owned experience with at least one valid evidence source. Blocks expand their media dependencies. See learn('knowledge').

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes(must not be empty, at most 200 characters)
originNoExplicit needs the user's remark as evidence; this is provenance, not confirmation.
topicsNo(at most 20 items)
sourcesYes(at least 1 item, at most 50 items)
summaryYes(must not be empty, at most 4000 characters)
trip_idNo
city_keyNo(at most 200 characters)
block_idsNoBlocks using this knowledge; deleting them does not invalidate it. (at most 50 items)
place_keyNo(at most 200 characters)
tz_offsetNo(≥-840, ≤840)
ended_at_utcNo
participantsNo(at most 50 items)
location_nameNo(at most 200 characters)
started_at_utcNo
create_memorySave memoryInspect

Save a user-owned memory with at least one valid evidence source. Blocks expand their media dependencies. See learn('knowledge').

ParametersJSON Schema
NameRequiredDescriptionDefault
originNoExplicit needs the user's remark as evidence; this is provenance, not confirmation.
sourcesYes(at least 1 item, at most 50 items)
categoryYes
block_idsNoBlocks using this knowledge; deleting them does not invalidate it. (at most 50 items)
statementYes(must not be empty, at most 4000 characters)
topic_keyNo(at most 200 characters)
subject_kindNo
subject_labelNo(at most 200 characters)
subject_person_idNo(must not be empty, at most 200 characters)
create_personCreate personInspect

Create a person owned by your account. Duplicate names are allowed; select stable person_id when binding identity.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNo(at most 20 items)
display_nameYes(must not be empty, at most 100 characters)
create_recall_questionnaireCreate recall questions
Idempotent
Inspect

Ask 1–3 high-value, source-backed questions for one trip. Returns a writable bearer recall link once; anyone holding it may answer. Never blocks trip editing or automatically updates knowledge. Learn recall first. Keep uncertain/no-impression choices and permit skipping.

ParametersJSON Schema
NameRequiredDescriptionDefault
introNo(at most 1000 characters)
titleYes(must not be empty, at most 200 characters)
trip_idYes
questionsYes(at least 1 item, at most 3 items)
expires_atNoUTC milliseconds, default 7 days and maximum 30 days
idempotency_keyYes(must not be empty, at most 200 characters)
replace_existingNoExplicitly revoke identical previous questionnaires and create a new link; preserves their answers
create_tripStart a tripBInspect

Start a trip - one journey, one notebook. Photos and timeline blocks hang off it.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesWhat to call this trip, in the traveller's language. (must not be empty)
end_dateNoYYYY-MM-DD. (must match ^\d{4}-\d{2}-\d{2}$)
start_dateNoYYYY-MM-DD. (must match ^\d{4}-\d{2}-\d{2}$)
default_tz_offsetNoMinutes east of UTC for this trip (Tokyo 540, Paris 120). Blocks inherit it.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnly=false, idempotent=false, destructive=false). The description adds context that a trip acts as a notebook holding photos and timeline blocks, though it does not disclose behavioral details such as default date/timezone handling or duplicate-trip behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The action is front-loaded and the conceptual model is conveyed in one clause, so every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create-with-title tool with full schema coverage and annotation context, the description plus schema is sufficient for correct invocation. It provides useful anchoring of what a trip represents, though a short pointer to update_trip for later modifications would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with title, end_date, start_date, and default_tz_offset all already described. The tool description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses 'Start a trip' as the verb+resource and adds a conceptual model with 'one journey, one notebook,' making it clear this is the trip-creation entry point. It does not explicitly differentiate from update_trip, but 'start' versus update is reasonably distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives like update_trip or set_trip_*. An agent must infer from the name alone that this is the creation operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

file_remarkFile a remark
Idempotent
Inspect

File a remark: set which trip it belongs to, attach the photos it talks about, mark it processed. This tool cannot touch the text - remarks are verbatim and stay that way.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoDefaults to 'filed' when the remark ends up with a trip. Filing without a trip is refused - words with no trip stay pending, where list_remarks can still find them.
trip_idNoThe trip these words belong to.
media_idsNoThe photos these words are about. Replaces the current list.
remark_idYes(must not be empty)
speaker_person_idNo(must not be empty)
get_experienceRead experienceA
Read-only
Inspect

Read a experience with evidence and versions. Set include_inactive=true for a review bundle; inactive content must not be used for generation.

ParametersJSON Schema
NameRequiredDescriptionDefault
experience_idYes(must not be empty, at most 200 characters)
include_inactiveNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral value beyond them: it discloses that inactive content is returned under a flag but must not be used for generation, a caveat an agent could not infer from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action before the flag guidance, and nothing is padding. Minor grammar slip ('a experience') and no wasted clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does state what comes back (evidence and versions) and flags the inactive-content caveat. It is nearly sufficient for a two-parameter read tool; only the relationship to list_experiences is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% – include_inactive has no schema description – and the description compensates by explaining exactly what that flag does and when to set it. The experience_id constraint is carried by the schema, so this is a net-positive contribution rather than a repeat.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('experience') and names what the payload contains ('evidence and versions'), which distinguishes it from list_experiences and the memory/timeline readers. However it never explicitly contrasts itself with the nearest sibling list_experiences, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage condition: set include_inactive=true when a review bundle is wanted, plus the constraint that inactive content must not be used for generation. It does not state when to prefer this over list_experiences or review_experience, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_memoryRead memoryA
Read-only
Inspect

Read a memory with evidence and versions. Set include_inactive=true for a review bundle; inactive content must not be used for generation.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes(must not be empty, at most 200 characters)
include_inactiveNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely new context: the return contents (evidence and versions) and the constraint that inactive content is not valid for generation, which is real behavioral guidance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no waste; the core action is front-loaded and the parameter guidance follows immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-param read tool with no output schema, the description covers the action, the key param, and the inactive-content caveat. It runs slightly short on explicit sibling differentiation but nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: memory_id has only constraint text and include_inactive has no description at all. The description compensates by explaining what include_inactive does (review bundle) and its downstream generation constraint, filling the gap the schema leaves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (memory) and adds that it returns evidence and versions, which distinguishes it from list_memories and create/update_memory. It doesn't explicitly contrast itself with the closest siblings like get_experience or review_memory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditional guidance: set include_inactive=true for a review bundle, and warns inactive content must not be used for generation. It doesn't state when to prefer this tool over siblings such as review_memory, but the parameter-level guidance is actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_personRead person
Read-only
Inspect

Read a person, including an archived historical identity. Does not enumerate memories or trips.

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYes(must not be empty, at most 200 characters)
get_recall_answersRead recall answers
Read-only
Inspect

Read answers changed since a questionnaire version and context_changes for source changes even without new answers. Includes raw supplements, source snapshots and link_holder/unverified attribution. Review changes before using existing knowledge tools; skipped questions are not preferences.

ParametersJSON Schema
NameRequiredDescriptionDefault
since_versionNo(≥0)
questionnaire_idYes
get_recall_questionnaireRead recall questions
Read-only
Inspect

Read your recall definition, progress, current answers and source-change flags. Never returns a token or reconstructs its link.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionnaire_idYes
get_timelineRead timelineA
Read-only
Inspect

Read a trip's timeline: every block with its full payload, plus a summary of the media it references. update_block replaces a payload whole, so read it from here before editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoOne local day only, YYYY-MM-DD. (must match ^\d{4}-\d{2}-\d{2}$)
limitNoDefault 50, max 200.
cursorNonext_cursor from the previous page.
trip_idYes(must not be empty)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses the return content (full block payloads and media summaries) and the editorial workflow implication. It adds useful behavioral context without contradicting 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the purpose and return contents, followed by a directly actionable caveat. Every clause contributes information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with a readOnlyHint and fully documented parameters, the description covers the key behavioral details and the read-before-edit workflow. It does not explicitly describe pagination, but limit and cursor are already documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all four parameters with full descriptions and constraints, so the description need not repeat them. The description adds no parameter-level detail beyond what the schema provides, earning the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('read'), identifies the resource ('a trip's timeline'), and details what is returned ('every block with its full payload, plus a summary of the media it references'). It also distinguishes itself from update_block by explaining the replacement semantics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent to read from this tool before editing because update_block replaces a payload whole, which is clear usage guidance. It does not mention other siblings like list_media or get_trip_state, so it is not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_travel_contextRead travel context
Read-only
Inspect

Get current facts, preferences and optional history for a trip. History is a candidate, not an instruction to compare every block.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo(≥1, ≤20)
queryNo(at most 4000 characters)
topicsNo(at most 20 items)
purposeYes
trip_idYes(must not be empty, at most 200 characters)
person_idsNo(at most 10 items)
get_trip_stateCheck trip progressA
Read-only
Inspect

Where a trip stands: how much is written, what is missing, whether it has a cover yet. Call this when picking a trip back up. media_quota says how many more photos or videos this trip can hold (cap null means unlimited) — check it before a big batch.

ParametersJSON Schema
NameRequiredDescriptionDefault
trip_idYes(must not be empty)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations have readOnlyHint=true and openWorldHint=false, so the tool is read-only. The description adds the media_quota cap semantics (cap null means unlimited), which is beyond annotations and gives important behavioral context for a trip capacity check. It doesn't contradict annotations. It also explains the media_quota field directly in the description, which is beyond the schema (schema only says 'must not be empty' for trip_id). This adds value for the agent, but it could be more explicit about what happens when a trip is not found (error behavior).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, which is appropriately concise. It front-loads the purpose ('Where a trip stands') and then gives usage context. The media_quota detail is relevant but perhaps could be trimmed, but it's not excessive. Every sentence serves a purpose: the first describes the tool's output, the second gives usage guidance. It's well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter (trip_id) and no output schema, the description covers the main relevant aspects: what the tool reports (progress, cover, media quota). The only missing piece is error behavior (e.g., invalid trip_id), but since the schema enforces non-empty, and the read-only nature is in annotations, this is sufficient for the agent to call it correctly. The description is complete for a simple check tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents trip_id. The description does not elaborate on trip_id format, but it's a simple ID with a must-not-be-empty constraint. The description adds value by clarifying the media_quota field (a parameter-like construct) even though it's not in the input schema. Since the coverage is high, a baseline 3 applies, but the description adds context about the quota semantics, which nudges it to a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it checks trip progress: how much is written, what's missing, whether cover exists. It also mentions the media_quota field, which is a specific aspect. This is a specific verb+resource (check trip state) and the main purpose is unambiguous. The title is an adequate shorthand already, but the description adds specific details like cover and media_quota.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Call this when picking a trip back up' and mentions to check media_quota before a big batch. This gives clear when-to-use guidance. It also differentiates from the start, though it doesn't explicitly say 'don't use for X', but the context of picking up a trip is specific enough. Words like 'where a trip stands' and 'before a big batch' give actionable scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_profileRead travel preferences
Read-only
Inspect

Read current travel, food and writing preferences for an active person; defaults to self. Same-topic items are retained; no generated profile summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idNo(must not be empty, at most 200 characters)
learnHow this works
Read-only
Inspect

How Vifo works. Without a topic you get the index and an overview; with one you get that guide in full.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoOne of: recall | people | knowledge | workflow | block_types | block_types/<TYPE> | media | pipeline | head | theme | voice | rules | recipes | recipes/<name>. Leave empty for the index.
list_experiencesList experiences
Read-only
Inspect

Read experience resources, default active only. Explicit status=2/3 is inspection, not a task queue. Can reverse-query a source.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo(≥1, ≤100)
queryNo(at most 4000 characters)
topicNo(must not be empty, at most 200 characters)
cursorNo
statusNo
trip_idNo(must not be empty, at most 200 characters)
person_idNo(must not be empty, at most 200 characters)
source_idNo(must not be empty, at most 200 characters)
source_kindNo
list_mediaList photos
Read-only
Inspect

List your photos and videos. Use it to find what still needs work: 'unclaimed' is the pool of media not yet in any trip, 'missing_description' is what came in from an upload link and has no words yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50, max 200.
cursorNoPrevious next_cursor; keep filter/trip_id unchanged.
filterNoDefault 'all'. 'missing_geo' has coordinates but no place name yet.
trip_idNoOnly media in this trip.
list_memoriesList memories
Read-only
Inspect

Read memory resources, default active only. Explicit status=2/3 is inspection, not a task queue. Can reverse-query a source.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo(≥1, ≤100)
queryNo(at most 4000 characters)
topicNo(must not be empty, at most 200 characters)
cursorNo
statusNo
categoryNo
person_idNo(must not be empty, at most 200 characters)
source_idNo(must not be empty, at most 200 characters)
source_kindNo
list_peopleList people
Read-only
Inspect

List owned people with bounded pagination. Names and aliases are search hints; ambiguous names require selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo(≥1, ≤100)
queryNo(at most 100 characters)
cursorNo(at most 4096 characters)
include_archivedNo
list_remarksRead the traveller's wordsA
Read-only
Inspect

Read what the traveller said, verbatim. Default shows pending remarks - words nobody has processed yet, often typed on the upload page or sent by a companion through an upload link. Start here when organising: read them, quote what belongs on the page exactly, then file_remark each one.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50, max 200.
stateNoDefault 'pending' - the ones still waiting for you.
cursorNonext_cursor from a previous page.
trip_idNoOnly remarks filed to (or submitted through) this trip.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds value by explaining that remarks are returned verbatim and that the default is pending (unprocessed) remarks, which is useful context about the output content. It also clarifies the source of pending remarks (upload page or companion via upload link). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the core action ('Read what the traveller said, verbatim'), then provides context on the default and the recommended workflow. Every clause serves a purpose, making it highly efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description explains the content (verbatim remarks), the default filter (pending), and the intended use case (organising before filing). It doesn't explicitly describe the output structure or pagination, but the schema covers cursor and limit. The description is sufficient for an agent to understand the tool's role and how to invoke it correctly, though a bit more on the output shape would be ideal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% – all four parameters have descriptive comments. The description itself does not elaborate on parameter details, but it does reinforce the default state behavior ('Default shows pending remarks') which aligns with the state parameter default. Since the schema already documents the parameters, the description adds only marginal semantic value beyond the schema, warranting the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: reading the traveller's remarks verbatim. It specifies the default behavior (pending remarks) and distinguishes it from related tools by mentioning the follow-up action of filing remarks, making it easy to tell apart from siblings like file_remark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear workflow: 'Start here when organising' and then 'file_remark each one', which signals when to use this tool (the reading step) versus filing. It also implies that the state parameter controls whether you see pending or filed remarks, though it doesn't explicitly state when to use other tools. The guidance is strong but could be more explicit about alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tripsList trips
Read-only
Inspect

List your trips. Default order matches the traveller's own page exactly: trips with no dates come first - those are the ones still being filled in, usually the journey they are on right now - then dated trips, newest journey first. Use order='updated' to see what was touched most recently instead. Call this when you do not know a trip_id yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 20, max 100.
orderNo'date' (default): trips without dates first (still being filled in, most recently edited first), then by start date, newest first. 'updated': most recently edited first - handy for picking up where you left off.
cursorNonext_cursor from the previous page. Only valid with the same order it was issued under.
person_idNoFilter explicitly recorded trip participants. (must not be empty, at most 200 characters)
request_uploadDeclare an uploadInspect

Step one of putting a file in: declare it and get upload URLs back (videos also get one for their cover frame). PUT the bytes, then call confirm_upload. Leave out trip_id when you do not know where it belongs yet — it waits in a pool. See learn('recipes/upload').

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesimage or video; photo is a legacy alias for image.
trip_idNoOptional. Without it the file waits in the unclaimed pool.
size_bytesYesSize of the original file in bytes.
content_hashYesSHA-256 of the original bytes, lowercase hex. Used to skip re-uploading. (must not be empty)
resolve_placeLook up a place nameA
Read-only
Inspect

Turn coordinates into a place name. The server queries and caches it, so you never call a geocoder yourself. Filing media with lat/lng does this automatically - reach for this tool when filling in old photos. It returns administrative levels; the landmark name is yours to write into location_name.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude, -90 to 90.
lngYesLongitude, -180 to 180.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=true, so the read-only nature is known, but the description adds that the server queries and caches results ('you never call a geocoder yourself') and that it returns administrative levels while the landmark name is left for the user to write into location_name. This is useful behavioral context beyond annotations, though it doesn't detail response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each purposeful: purpose, usage context/behavior, and output handling. The most important information (what it does) is front-loaded. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only tool with no output schema, the description covers purpose, when to use, server-side behavior, and what the tool returns (administrative levels). It also clarifies that the landmark name must be written by the caller. Minor gap: exact structure of administrative levels is not specified, but this is acceptable given simplicity and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already documents lat and lng with ranges (100% coverage). The description does not add parameter-specific meaning beyond what the schema provides; it mentions 'lat/lng' in context but not new semantics. Baseline 3 is appropriate since schema handles parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Turn coordinates into a place name') with a clear resource (coordinates) and output (place name). It also distinguishes itself from sibling tools by noting that media filing does this automatically, making it the manual alternative for old photos. This is a precise, non-tautological statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use: 'reach for this tool when filling in old photos' and clarifies that automatic filing already performs this task, implying a fallback scenario. It gives clear context and implicitly tells the agent not to use it when filing media automatically.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_personRestore personInspect

Restore an archived person with expected_version.

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYes(must not be empty, at most 200 characters)
expected_versionYes(≥1)
review_experienceVerify experienceInspect

Actively verify a experience. Valid review requires the chosen sources with observed_version from a fresh bundle; invalid needs a reason. Version conflicts roll back all changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo(must not be empty, at most 200 characters)
originNoExplicit needs the user's remark as evidence; this is provenance, not confirmation.
reasonNo(at most 4000 characters)
topicsNo(at most 20 items)
sourcesNo(at least 1 item, at most 50 items)
summaryNo(must not be empty, at most 4000 characters)
trip_idNo
city_keyNo(at most 200 characters)
decisionYes
block_idsNoBlocks using this knowledge; deleting them does not invalidate it. (at most 50 items)
place_keyNo(at most 200 characters)
tz_offsetNo(≥-840, ≤840)
ended_at_utcNo
participantsNo(at most 50 items)
experience_idYes(must not be empty, at most 200 characters)
location_nameNo(at most 200 characters)
started_at_utcNo
expected_versionYes(≥1)
review_memoryVerify memoryInspect

Actively verify a memory. Valid review requires the chosen sources with observed_version from a fresh bundle; invalid needs a reason. Version conflicts roll back all changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
originNoExplicit needs the user's remark as evidence; this is provenance, not confirmation.
reasonNo(at most 4000 characters)
sourcesNo(at least 1 item, at most 50 items)
categoryNo
decisionYes
block_idsNoBlocks using this knowledge; deleting them does not invalidate it. (at most 50 items)
memory_idYes(must not be empty, at most 200 characters)
statementNo(must not be empty, at most 4000 characters)
topic_keyNo(at most 200 characters)
subject_kindNo
subject_labelNo(at most 200 characters)
expected_versionYes(≥1)
subject_person_idNo(must not be empty, at most 200 characters)
set_experience_peopleSet experience participantsInspect

Replace the full experience participant set using expected_version. Does not infer feelings or preferences.

ParametersJSON Schema
NameRequiredDescriptionDefault
participantsYes(at most 50 items)
experience_idYes(must not be empty, at most 200 characters)
expected_versionYes(≥1)
set_trip_endingWrite the closingA
Idempotent
Inspect

Write the closing passage that ends a trip's page — what the journey left behind. It is not a second summary: the summary opens the page and tells a stranger what kind of trip this was, while the closing is read after they have been through all of it, so it can say the thing that only makes sense once you have seen the whole thing. Write it once the timeline is actually finished. If nothing comes to mind, leave it out - a forced ending reads worse than none.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoTwo or three sentences, printed at the very end of the page. Read by people, so write it in the traveller's language, not English. Ground it in what actually happened on this trip, not in travel-writing sentiment. (must not be empty)
clearNoRemove the closing instead of writing one.
trip_idYes(must not be empty)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context: it should be written in the traveller's language, grounded in actual trip events, and a forced ending is worse than none. This goes beyond annotations and helps the agent produce appropriate content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core purpose. Each sentence adds value: the primary action, the contrast with summary, the timing requirement, and the quality guidance. No wasted words, and it flows logically.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the three parameters are fully documented in the schema and the description explains the tool's role and usage conditions, it is largely complete. It doesn't explicitly mention the clear parameter for removing a closing, but the schema covers that. The description gives enough conceptual context for an agent to decide when and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters (text, clear, trip_id) are well-documented. The description does not add any parameter-specific semantics beyond the schema, but it does hint at the 'clear' concept via 'leave it out' (though it doesn't explicitly link to the parameter). Baseline of 3 is appropriate given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes the closing passage for a trip's page, using a specific verb ('write') and resource ('closing passage'). It explicitly differentiates this from a summary, noting the summary opens the page while the closing comes after the whole journey is seen, which distinguishes it from sibling tools like set_trip_head or set_trip_theme.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use it: write it once the timeline is finished, and skip it if nothing comes to mind to avoid a forced ending. It also explains the distinction from the summary, which guides when not to use it for that purpose. However, it doesn't name other sibling tools like set_trip_head or set_trip_theme, but the summary contrast is a strong enough alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_trip_headSet cover and highlightsA
Idempotent
Inspect

Set a trip's cover and highlights — the curated layer above the timeline. summary is the only original writing; the ref fields point at blocks that already exist. The first call needs all four fields; later calls may send only what changes. Read the current one from get_trip_state. Guidance: learn('head').

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNoCover layout. See learn('head') for what each one shows.
replaceNoReplace the whole head instead of merging into it. Then all four fields are required.
summaryNoTwo or three sentences on what this trip turned out to be. Read by people, so write it in the traveller's language, not English. See learn('head'). (must not be empty)
trip_idYes(must not be empty)
cover_refsNoBlock ids whose first photo makes the cover, in order. (at least 1 item, at most 5 items)
highlight_refsNoBlock ids for the highlight strip; 3-5 works best. (at least 1 item, at most 5 items)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description explains key behaviors: summary is the only original writing, refs must point to existing blocks, and calls are merge-like after the first. This is valuable context that annotations alone do not provide, and it is consistent with readOnlyHint=false and idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, opening with purpose and then providing constraints, call pattern, and guidance. Every sentence earns its place and there is no filler or redundant restating of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, ref semantics, partial-update behavior, reading current state, and external guidance. Minor ambiguity remains about which four fields are required on the first call, and the replace behavior is only in the schema, but the overall definition is complete enough for such a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds cross-parameter meaning by clarifying that ref fields reference existing blocks, that summary is original, and that partial updates are allowed after the first call. It does not repeat each parameter's schema text, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb and resource: sets a trip's cover and highlights, and characterizes it as the curated layer above the timeline. This clearly separates it from siblings like set_trip_ending, set_trip_theme, and update_trip without needing to open schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit workflow guidance: first call needs all four fields, later calls may send only changes, and the current head should be read via get_trip_state. It also points to learn('head') for further guidance. It does not explicitly state when not to use this tool versus alternatives, but the usage context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_trip_peopleSet trip participantsInspect

Replace the full trip participant set using expected_people_version. Membership does not imply participation in every experience.

ParametersJSON Schema
NameRequiredDescriptionDefault
trip_idYes(must not be empty, at most 200 characters)
participantsYes(at most 50 items)
expected_people_versionYes(≥1)
set_trip_themeRestyle the pageA
Idempotent
Inspect

Restyle one trip's page within a fixed set of tokens — colours, heading face, photo treatment. Colours are checked for contrast and rejected if unreadable. Send only the tokens you want to change. Full list: learn('theme').

ParametersJSON Schema
NameRequiredDescriptionDefault
tokensYes
replaceNoReplace the whole theme instead of merging; unsent tokens go back to default.
trip_idYes(must not be empty)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that colours are contrast-checked and rejected if unreadable, and that styling is constrained to a fixed set of tokens. This adds meaningful runtime behavior; it does not contradict the idempotent or non-destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each earning its place: the action, the token scope, the validation behavior, and the way to get the full list. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderately complex tool with nested token objectsys, the description covers the key behavioral and partial-update aspects and directs the agent to learn('theme') for the authoritative token list. The schema covers the remaining parameter details, and no output schema is required for a restyle operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds useful partial-update semantics ('Send only the tokens you want to change') and categorizes tokens as colours, heading face, and photo treatment. However, the schema already documents most parameters, and the description does not explain the replace flag or individual token constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Restyle') and resource ('one trip's page') and scopes the work to a fixed set of tokens. This clearly separates it from sibling tools like set_trip_head or set_trip_ending, which target different aspects of a trip.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit usage rule ('Send only the tokens you want to change') and points to learn('theme') for the full token list. It does not explicitly contrast with sibling tools, but the purpose statement and sibling names make the appropriate context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

show_mediaShow items to the travellerA
Idempotent
Inspect

Show the traveller a set of their own photos and videos: a short-lived link, no sign-in needed. Use it when you want them to look before you decide — 'are these three from the Kyoto trip?', 'here is what is still unfiled', 'day 3 in the order I have it', or the results of a search. Pick the scope with exactly one of three: media_ids (the ones search or list_media returned, in the order you want them shown), trip_id (everything in that trip, narrowable with from/to), or unfiled: true (everything not filed into a trip yet — use this rather than listing the unclaimed pool and passing its ids back). Each item carries a number so they can answer 'the 2nd and 5th'. Not a share link: this is for the owner, read-only, expires in 24 hours (1–72), and shows raw material rather than the finished trip. Calling again with the same selection returns the same link while it is live, with the new note on it — so ask your next question by calling again, not by sending the old address with a new question in the chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoYYYY-MM-DD, inclusive. Only with trip_id.
fromNoYYYY-MM-DD, inclusive, local to the photo. Only with trip_id.
noteNoShown at the top of the page — the question you want answered. (at most 500 characters)
trip_idNoEverything in this trip; narrow with from/to. A live view: the page re-reads the trip every time it is opened, so material added later shows up and material moved out or deleted disappears. (must not be empty)
unfiledNoPass true for everything not filed into a trip yet. Only true is a selection — there is no unfiled: false; to show something else, leave this out and give media_ids or trip_id. A live view: the page re-reads the pool every time it is opened, so anything filed into a trip in the meantime drops off it.
media_idsNoSpecific items, in the order to show them. (at least 1 item, at most 200 items)
ttl_hoursNoDefault 24. (≥1, ≤72)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behaviors beyond annotations: link expiry (24 hours, 1–72), no sign-in needed, live-view behavior for trip_id and unfiled, item numbering, and idempotent regeneration with the same link and updated note. This complements the idempotentHint annotation and clarifies the read-only nature of the resulting page.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense and front-loaded with the core purpose. It uses examples and clear scope rules; some sentences could be tightened, but each contributes either usage guidance, behavioral context, or a distinction from alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description conveys what the agent gets back: a short-lived link, the same link on repeat calls, item numbering for reference, and the note display. It also addresses authentication, expiry, and live-view behavior, making it sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all parameters at 100%, but the description adds selection semantics: exactly one of media_ids, trip_id, or unfiled:true, ordering for media_ids, and why unfiled:true is preferable to passing a pool of ids. This goes beyond the schema's per-parameter descriptions without duplicating them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Show the traveller a set of their own photos and videos: a short-lived link, no sign-in needed.' It clearly distinguishes itself from share links and other siblings by emphasizing this is for the owner, read-only, and temporary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('Use it when you want them to look before you decide') with concrete examples, and provides exclusions: 'Not a share link' and 'use unfiled rather than listing the unclaimed pool and passing its ids back.' It also names related tools like search and list_media, making the choice of scope clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_videoTranscribe a videoA
Idempotent
Inspect

Transcribe what is said in a video. Not done automatically — ask for it only when the traveller wants what was said kept, because a travel video's audio often catches other people talking, and turning that into a written record is a different thing from keeping the video. The transcript is stored on the media and returned to you; it is raw speech-to-text, so treat it as material to write from, not as finished text for the page.

ParametersJSON Schema
NameRequiredDescriptionDefault
redoNoTranscribe again even if there is already a transcript.
media_idYes(must not be empty)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the transcript is 'stored on the media and returned', adding a side-effect beyond the annotations. It also warns the output is 'raw speech-to-text' and should be treated as source material, which is useful for how the agent handles the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying a distinct function: purpose, usage condition, and output/behavior. No redundant phrasing, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with annotations for idempotence and destructiveness, the description covers the key behavioral facts: when to invoke, what gets stored, and what the returned data is like. The lack of an output schema is mitigated by the explicit statement that the transcript is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents both parameters (media_id, redo) with descriptions, so the description does not need to repeat them. The description adds no parameter-level detail, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Transcribe what is said in a video') and immediately clarifies it is a written-record operation, not just video handling. This differentiates it from sibling media tools like view_media or update_media, so an agent can identify when this tool is relevant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly conditions use: 'ask for it only when the traveller wants what was said kept' and says it is 'Not done automatically'. It also contrasts transcription with 'keeping the video', giving a clear when-not-to-use signal without needing a sibling name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_blockEdit a timeline blockA
Idempotent
Inspect

Edit one timeline block: its content, badge or time, or switch it to a different layout (pass type together with a payload matching that layout). The payload replaces the old one whole, so read it with get_timeline first.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOnly when switching layout; payload must come with it and match.
badgeNo
payloadNoReplaces the old payload entirely. title / subtitle / text / caption / facts / badge are printed on the page and read by people who were not there, so write them in the traveller's language, not English. No field names or debugging traces, and no coordinates — the share page withholds those on purpose. The worked examples in learn('block_types') are written in English only to show the shape of each payload; your text goes in the traveller's language. See learn('voice').
trip_idYes(must not be empty)
block_idYes(must not be empty)
sort_keyNo
tz_offsetNo
occurred_at_utcNo
expected_versionYesThe version you read. A mismatch is rejected so you cannot overwrite someone else's edit.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as non-read-only, non-destructive, and idempotent. The description adds valuable behavior beyond that: the payload replaces the old one whole, and switching layout requires type plus a matching payload. This warns the agent about an important side effect without contradicting 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The most important behavioral fact, full payload replacement, is placed early and immediately followed by the required precondition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 9-parameter mutation with a nested payload and no output schema, the description plus schema covers the core flow: fetching current state first, replacing the payload, switching layouts, and version guarding. It is not fully complete—return behavior and sort_key semantics are not addressed—but it is strong enough for correct invocation in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 56%, so the description needs to compensate. It does clarify payload semantics and the type/payload relationship, and 'badge or time' maps to some fields. However, it leaves sort_key, tz_offset, and occurred_at_utc semantics largely implicit, so the low coverage is not fully compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource, 'Edit one timeline block', and enumerates the editable aspects: content, badge, time, or layout. This clearly separates it from siblings like add_block and get_timeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit precondition: 'read it with get_timeline first', which is essential before replacing a payload. It does not explicitly name alternatives or when-not-to-use cases, but the edit-vs-add distinction is strongly implied by the wording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_experienceEdit experienceInspect

Edit a experience using expected_version; changed knowledge needs review before use. You cannot directly set status.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo(must not be empty, at most 200 characters)
originNoExplicit needs the user's remark as evidence; this is provenance, not confirmation.
topicsNo(at most 20 items)
sourcesNo(at least 1 item, at most 50 items)
summaryNo(must not be empty, at most 4000 characters)
trip_idNo
city_keyNo(at most 200 characters)
block_idsNoBlocks using this knowledge; deleting them does not invalidate it. (at most 50 items)
place_keyNo(at most 200 characters)
tz_offsetNo(≥-840, ≤840)
ended_at_utcNo
participantsNo(at most 50 items)
experience_idYes(must not be empty, at most 200 characters)
location_nameNo(at most 200 characters)
started_at_utcNo
expected_versionYes(≥1)
update_mediaEdit photo details
Idempotent
Inspect

Edit one photo or video: claim it into a trip, rewrite its description, or correct its time, place, crop and rotation. When you correct a timestamp or coordinates, correct exif_source / tz_source in the same call — the value and the evidence for it must stay consistent.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoNoReverse-geocoded place. Normally filled by the server from lat/lng — you rarely set it. See learn('recipes/geocode').
latNo
lngNo
cropNoCrop, two forms: an explicit rectangle {x,y,w,h} in 0-1 fractions from the top-left, or {aspect, gravity} to let the server frame it. null clears the crop. See learn('media').
focalNoSubject position as {x,y} in 0-1 fractions. Layouts frame around it instead of the centre. Does not alter the image.
creditNoWhere a reference image came from.
rotateNoClockwise degrees; null clears rotation. EXIF orientation is already applied; use this only for a deliberate turn.
previewNoReturn the cropped result for you to look at (default true). Turn off for batch edits.
trip_idNoClaim this media into one of your trips. Unclaimed media sits in a pool until then.
keywordsNoSpace-separated search terms, in the traveller's language.
media_idYes(must not be empty)
tz_offsetNoMinutes east of UTC at the place of capture (Tokyo 540, Paris 120).
tz_sourceNoWhere tz_offset came from. Set to 'given' once you supply a real one.
provenanceNo'reference' means someone else's picture and requires credit. Switching back to 'own' clears credit.
descriptionNoWhat this shows. People read it — the traveller years from now, and friends who open the share link — so write it in the language the traveller speaks, not English. Be concrete: name the dish, the street, the light. Empty is rejected.
exif_sourceNoWhere the time and coordinates came from. See learn('recipes/exif').
location_nameNoWhat the traveller calls this place — a venue or landmark. Reverse geocoding fills geo separately.
occurred_at_utcNoCapture time, epoch milliseconds UTC.
contributor_person_idNo(must not be empty)
update_memoryEdit memoryInspect

Edit a memory using expected_version; changed knowledge needs review before use. You cannot directly set status.

ParametersJSON Schema
NameRequiredDescriptionDefault
originNoExplicit needs the user's remark as evidence; this is provenance, not confirmation.
sourcesNo(at least 1 item, at most 50 items)
categoryNo
block_idsNoBlocks using this knowledge; deleting them does not invalidate it. (at most 50 items)
memory_idYes(must not be empty, at most 200 characters)
statementNo(must not be empty, at most 4000 characters)
topic_keyNo(at most 200 characters)
subject_kindNo
subject_labelNo(at most 200 characters)
expected_versionYes(≥1)
subject_person_idNo(must not be empty, at most 200 characters)
update_personEdit personInspect

Edit a person name or aliases with expected_version. Historical attribution and sender snapshots retain their identity.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNo(at most 20 items)
person_idYes(must not be empty, at most 200 characters)
display_nameNo(must not be empty, at most 100 characters)
expected_versionYes(≥1)
update_tripEdit tripB
Idempotent
Inspect

Rename a trip or correct its dates and default timezone.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo(must not be empty)
trip_idYes(must not be empty)
end_dateNo(must match ^\d{4}-\d{2}-\d{2}$)
start_dateNo(must match ^\d{4}-\d{2}-\d{2}$)
default_tz_offsetNoMinutes east of UTC.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=false, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds context about what can be changed but doesn't disclose additional behaviors like validation between start/end dates or partial-update semantics. Since annotations are strong, the description's marginal value is sufficient for a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero redundancy. It names the three key actions (rename, correct dates, correct timezone) efficiently. Slightly more specific language about partial updates would push it higher, but it's already concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters but only one required, and no output schema. The description explains the purpose but doesn't cover edge cases like what happens if only end_date is provided, validation between start/end dates, or the meaning of default_tz_offset (though the schema defines it). For a mutation tool with multiple optional fields, this is a moderate gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage with descriptions for all five parameters. The description groups them (title, dates, timezone) which adds minor organization but no new semantic meaning beyond the schema. It doesn't hint at relationships between fields (e.g., date ordering). Baseline 3 is appropriate when the schema carries the bulk of the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('rename/correct') and resource ('trip'), and specifies the exact attributes (title, dates, default timezone). It distinguishes from sibling tools like create_trip, update_block, and set_trip_ending, though it doesn't explicitly name a sibling as an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (to rename or correct a trip's dates/timezone) but doesn't explicitly contrast it with siblings like set_trip_ending or set_trip_head, which modify specific fields. An agent would infer usage from context but without explicit exclusions, it's adequate but not exceptional.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

view_mediaLook at photosA
Read-only
Inspect

Look at the pictures themselves, with their time and place attached — you can only describe what you have seen. Name specific media_ids, or give a trip_id to pull a batch. Videos come back as their cover frame. The images enter your model's context; the server runs no image analysis of its own.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 6.
widthNoDefault 400; ask for 800 only to check detail.
filterNoWith trip_id. Default 'missing_description'.
trip_idNoPull a batch from this trip instead.
media_idsNoUp to 6.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses critical behavioral traits beyond the readOnlyHint annotation: images enter the model's context, the server runs no image analysis itself, videos return as cover frames, and metadata (time and place) is attached. This tells the agent exactly what to expect from the call and how to interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight, front-loaded sentences cover purpose, usage, and behavior with zero redundancy. Every sentence earns its place, and the most important information (what the tool does) leads off.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description sufficiently explains what the agent receives (images, metadata, cover frames) and how to request them (media_ids or trip_id). It also states the no-analysis limitation, which is critical for the agent to know it must interpret images itself. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds minor value by explaining the relationship between media_ids and trip_id ('Name specific media_ids, or give a trip_id to pull a batch') and the concept of batching, but does not add significant meaning beyond what the schema already defines.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Look at the pictures themselves' – a specific verb and resource – and clarifies that it returns actual media content with time and place attached. This distinguishes it from listing tools like list_media (metadata only) and conveys its core function clearly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage instructions: name specific media_ids or provide trip_id for a batch, and notes the 'filter' option with trip_id. While it implies this is for viewing actual content ('you can only describe what you have seen'), it does not explicitly name alternatives or state when not to use this tool, leaving some inference to the agent.

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.

  1. 4 tool updates
    • Addedcreate_recall_questionnaire
    • Addedget_recall_answers
    • Addedget_recall_questionnaire
    • Changedlearn1 field changed
      • changedInput schema / properties / topic / description
        Previous value: -"One of: people | knowledge | workflow | block_types | block_types/<TYPE> | media | pipeline | head | theme | voice | rules | recipes | recipes/<name>. Leave empty for the index."New value: +"One of: recall | people | knowledge | workflow | block_types | block_types/<TYPE> | media | pipeline | head | theme | voice | rules | recipes | recipes/<name>. Leave empty for the index."
  2. 28 tool updates
    • Addedarchive_person
    • Changedcapture_remark1 field changed
      • addedInput schema / properties / speaker_person_id
        Added value: +{
        +  "description": "(must not be empty)",
        +  "type": "string"
        +}
    • Changedconfirm_upload1 field changed
      • addedInput schema / properties / contributor_person_id
        Added value: +{
        +  "description": "(must not be empty)",
        +  "type": "string"
        +}
    • Changedcreate_experience1 field changed
      • addedInput schema / properties / participants
        Added value: +{
        +  "description": "(at most 50 items)",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "person_id": {
        +        "description": "(must not be empty, at most 200 characters)",
        +        "type": "string"
        +      },
        +      "role": {
        +        "enum": [
        +          "participant",
        +          "guide",
        +          "local_contact",
        +          "other"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "person_id",
        +      "role"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedcreate_memory1 field changed
      • addedInput schema / properties / subject_person_id
        Added value: +{
        +  "description": "(must not be empty, at most 200 characters)",
        +  "type": "string"
        +}
    • Addedcreate_person
    • Changedcreate_upload_link1 field changed
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "Stable ID from list_people; use it to distinguish same-name people. (must not be empty)",
        +  "type": "string"
        +}
    • Changedfile_remark1 field changed
      • addedInput schema / properties / speaker_person_id
        Added value: +{
        +  "description": "(must not be empty)",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Addedget_person
    • Changedget_travel_context1 field changed
      • addedInput schema / properties / person_ids
        Added value: +{
        +  "description": "(at most 10 items)",
        +  "items": {
        +    "description": "(must not be empty, at most 200 characters)",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedget_user_profile1 field changed
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "(must not be empty, at most 200 characters)",
        +  "type": "string"
        +}
    • Changedlearn1 field changed
      • changedInput schema / properties / topic / description
        Previous value: -"One of: knowledge | workflow | block_types | block_types/<TYPE> | media | pipeline | head | theme | voice | rules | recipes | recipes/<name>. Leave empty for the index."New value: +"One of: people | knowledge | workflow | block_types | block_types/<TYPE> | media | pipeline | head | theme | voice | rules | recipes | recipes/<name>. Leave empty for the index."
    • Changedlist_experiences1 field changed
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "(must not be empty, at most 200 characters)",
        +  "type": "string"
        +}
    • Changedlist_media1 field changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Previous next_cursor; keep filter/trip_id unchanged.",
        +  "type": "string"
        +}
    • Changedlist_memories1 field changed
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "(must not be empty, at most 200 characters)",
        +  "type": "string"
        +}
    • Addedlist_people
    • Changedlist_trips1 field changed
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "Filter explicitly recorded trip participants. (must not be empty, at most 200 characters)",
        +  "type": "string"
        +}
    • Changedrequest_upload2 fields changed
      • addedInput schema / properties / kind / description
        Added value: +"image or video; photo is a legacy alias for image."
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "image",
        -  "video"
        -]New value: +[
        +  "image",
        +  "video",
        +  "photo"
        +]
    • Addedrestore_person
    • Changedreview_experience1 field changed
      • addedInput schema / properties / participants
        Added value: +{
        +  "description": "(at most 50 items)",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "person_id": {
        +        "description": "(must not be empty, at most 200 characters)",
        +        "type": "string"
        +      },
        +      "role": {
        +        "enum": [
        +          "participant",
        +          "guide",
        +          "local_contact",
        +          "other"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "person_id",
        +      "role"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedreview_memory1 field changed
      • addedInput schema / properties / subject_person_id
        Added value: +{
        +  "description": "(must not be empty, at most 200 characters)",
        +  "type": "string"
        +}
    • Changedrevoke_upload_link1 field changed
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "Stable ID from list_people or get_trip_state; can revoke an archived person's link. (must not be empty)",
        +  "type": "string"
        +}
    • Addedset_experience_people
    • Addedset_trip_people
    • Changedupdate_experience1 field changed
      • addedInput schema / properties / participants
        Added value: +{
        +  "description": "(at most 50 items)",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "person_id": {
        +        "description": "(must not be empty, at most 200 characters)",
        +        "type": "string"
        +      },
        +      "role": {
        +        "enum": [
        +          "participant",
        +          "guide",
        +          "local_contact",
        +          "other"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "person_id",
        +      "role"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedupdate_media4 fields changed
      • addedInput schema / properties / contributor_person_id
        Added value: +{
        +  "description": "(must not be empty)",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedInput schema / properties / rotate / description
        Previous value: -"Clockwise degrees. EXIF orientation is already applied; use this only for a deliberate turn."New value: +"Clockwise degrees; null clears rotation. EXIF orientation is already applied; use this only for a deliberate turn."
      • changedInput schema / properties / rotate / enum
        Previous value: -[
        -  90,
        -  180,
        -  270
        -]New value: +[
        +  90,
        +  180,
        +  270,
        +  null
        +]
      • changedInput schema / properties / rotate / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
    • Changedupdate_memory1 field changed
      • addedInput schema / properties / subject_person_id
        Added value: +{
        +  "description": "(must not be empty, at most 200 characters)",
        +  "type": "string"
        +}
    • Addedupdate_person
  3. 13 tool updates
    • Addedcreate_experience
    • Addedcreate_memory
    • Addedget_experience
    • Addedget_memory
    • Addedget_travel_context
    • Addedget_user_profile
    • Changedlearn1 field changed
      • changedInput schema / properties / topic / description
        Previous value: -"One of: workflow | block_types | block_types/<TYPE> | media | pipeline | head | theme | voice | rules | recipes | recipes/<name>. Leave empty for the index."New value: +"One of: knowledge | workflow | block_types | block_types/<TYPE> | media | pipeline | head | theme | voice | rules | recipes | recipes/<name>. Leave empty for the index."
    • Addedlist_experiences
    • Addedlist_memories
    • Addedreview_experience
    • Addedreview_memory
    • Addedupdate_experience
    • Addedupdate_memory
  4. 30 tool updates
    • First observedaccount_status
    • First observedadd_block
    • First observedcapture_remark
    • First observedconfirm_upload
    • First observedcreate_share_link
    • First observedcreate_trip
    • First observedcreate_upload_link
    • First observedfile_remark
    • First observedget_timeline
    • First observedget_trip_state
    • First observedlearn
    • First observedlist_media
    • First observedlist_remarks
    • First observedlist_trips
    • First observedrequest_upload
    • First observedresolve_place
    • First observedrevoke_share_link
    • First observedrevoke_upload_link
    • First observedsearch
    • First observedset_trip_ending
    • First observedset_trip_head
    • First observedset_trip_theme
    • First observedshow_media
    • First observedtranscribe_video
    • First observedupdate_block
    • First observedupdate_media
    • First observedupdate_share_link
    • First observedupdate_trip
    • First observedupgrade_link
    • First observedview_media

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables an AI companion to take a small solo trip to a real, specific place, choosing its own steps over 4–10 rounds and then writing its own travelogue and picking one thing to bring home. Each journey becomes a station on a self-hosted roadbook map with coordinates, the traveler's own words, their souvenir, and a matching photo, with unfinished trips never lost and no ghostwriting by the engine.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources