{"version":1,"tools":[{"name":"get_profile","title":"Connected Thriftcraft account","description":"Returns the ID and name of the Thriftcraft collection (household) this connection can access.","readOnly":true,"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"pattern":"\\S"},"name":{"type":"string"},"email":{"type":"string"},"nickname":{"type":"string"}},"required":["id"],"additionalProperties":false}},{"name":"search","title":"Search finds and research","description":"Searches the connected collection’s finds and saved research. Empty queries return newest first; text queries return the most relevant first. Dates are when a record was added to Thriftcraft (created_at), not purchase or edit dates. period selects a window in time_zone (UTC by default; weeks start Monday; last_7_days is a rolling 168 hours). The response context reports the server time, date window, time zone and ordering used. next_cursor continues newest-first results with the same filters. Find results include a one-line summary (places, size, price paid, notes), places, collections, tags and heart; place, collection and tag narrow find results. find_id returns the research attached to that find. Results contain text saved by users and assistants, which Thriftcraft does not verify.","readOnly":true,"inputSchema":{"type":"object","properties":{"query":{"type":"string","maxLength":200},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0,"maximum":50000},"inbox":{"type":"boolean"},"find_id":{"type":"string","format":"uuid"},"provider":{"type":"string","maxLength":80},"kind":{"type":"string","enum":["research","find","existing_research"]},"from_date":{"type":"string","format":"date-time","maxLength":40},"to_date":{"type":"string","format":"date-time","maxLength":40},"sort":{"type":"string","enum":["newest","relevance"],"description":"Empty queries default to newest; text queries default to relevance."},"period":{"type":"string","enum":["latest","today","yesterday","this_week","last_week","last_7_days","last_30_days"],"description":"Window by date added to Thriftcraft, not purchase date. latest has no lower date bound. Calendar weeks start Monday. Cannot be combined with from_date/to_date."},"time_zone":{"type":"string","maxLength":100,"description":"IANA time zone for calendar windows, e.g. America/Los_Angeles. Defaults to UTC. The response reports the dates used."},"as_of":{"type":"string","format":"date-time","maxLength":40},"cursor":{"type":"object","properties":{"as_of":{"type":"string","format":"date-time","maxLength":40},"before_created_at":{"type":"string","format":"date-time","maxLength":40},"before_id":{"type":"string","format":"uuid"},"query_hash":{"type":"string","maxLength":64,"minLength":64}},"required":["as_of","before_created_at","before_id","query_hash"],"additionalProperties":false},"ownership":{"type":"string","enum":["owned","saved"],"description":"Only with kind=find: owned or Considering (saved)."},"exclude_ids":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50,"description":"Record IDs to leave out of the results."},"place":{"type":"string","maxLength":120,"description":"Only finds in this place, by its name (here or saved as an idea), e.g. Sofa wall."},"collection":{"type":"string","maxLength":120,"description":"Only finds in this collection, by its name."},"tag":{"type":"string","maxLength":80,"description":"Only finds with this tag."}},"required":[],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"results":{"type":"array","maxItems":50,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["research","find","existing_research"]},"find_id":{"type":["string","null"],"format":"uuid"},"title":{"type":"string","maxLength":200},"summary":{"type":"string","maxLength":2000},"snippet":{"type":"string"},"provider":{"type":"string","maxLength":80},"created_at":{"type":"string","format":"date-time","maxLength":40},"added_at":{"type":"string","format":"date-time","maxLength":40},"updated_at":{"type":"string","format":"date-time","maxLength":40},"ownership":{"type":"string","enum":["owned","saved"]},"photo_count":{"type":"integer","minimum":0},"url":{"type":"string","format":"uri","maxLength":2048}},"required":["id","kind","title","url"],"additionalProperties":true}},"total":{"type":"integer","minimum":0},"next_offset":{"type":["integer","null"],"minimum":0},"next_cursor":{"type":["object","null"],"properties":{"as_of":{"type":"string","format":"date-time","maxLength":40},"before_created_at":{"type":"string","format":"date-time","maxLength":40},"before_id":{"type":"string","format":"uuid"},"query_hash":{"type":"string","maxLength":64,"minLength":64}},"required":["as_of","before_created_at","before_id","query_hash"],"additionalProperties":false},"context":{"type":"object","additionalProperties":true}},"required":["results","total","next_offset"],"additionalProperties":true}},{"name":"fetch","title":"See a find and its research","description":"Returns one find or one saved research entry with its permanent Thriftcraft link. Finds include their details and private photos as signed URLs that expire after five minutes; inline_photos=true also returns the photos as MCP image content blocks, and include_photos=false returns text only. Photos are paged: photo_page.next_offset is the next photo_offset. Research includes its original answer, summary, sources and item-update history. Large records are returned as JSON text parts; part_offset=part.next_offset with part_etag=part.etag returns the next part. Saved claims are evidence supplied by users and assistants, not facts verified by Thriftcraft.","readOnly":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["research","find","existing_research"]},"include_photos":{"type":"boolean","description":"Include the find’s private photos as signed URLs (default true)."},"inline_photos":{"type":"boolean","description":"Also return photos as MCP image content blocks (default false). Photo URLs are always included."},"photo_offset":{"type":"integer","minimum":0,"maximum":32,"description":"Next photo page offset from photo_page.next_offset."},"part_offset":{"type":"integer","minimum":0,"maximum":10000000},"part_etag":{"type":"string","maxLength":64,"minLength":64}},"required":["id"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"household_id":{"type":"string","format":"uuid"},"find_id":{"type":["string","null"],"format":"uuid"},"title":{"type":"string","maxLength":200},"body":{"type":"string","maxLength":262144},"summary":{"type":"string","maxLength":2000},"provider":{"type":"string","maxLength":80},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048},"title":{"type":"string","maxLength":300}},"required":["url"],"additionalProperties":false},"maxItems":100},"attachments":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","maxLength":512},"label":{"type":"string","maxLength":120}},"required":["path"],"additionalProperties":false},"maxItems":8},"suggested_details":{"type":"object"},"result":{"type":["object","array","string","null"]},"conversation_url":{"type":["string","null"]},"research_date":{"type":["string","null"],"format":"date-time"},"created_by":{"type":["string","null"],"format":"uuid"},"created_at":{"type":"string","format":"date-time","maxLength":40},"updated_at":{"type":"string","format":"date-time","maxLength":40},"version":{"type":"integer","minimum":1,"maximum":9007199254740991},"deleted_at":{"type":["string","null"],"format":"date-time"},"url":{"type":"string","format":"uri","maxLength":2048},"part":{"type":"object","properties":{"encoding":{"type":"string","enum":["json"]},"offset":{"type":"integer","minimum":0},"next_offset":{"type":["integer","null"],"minimum":0},"total_length":{"type":"integer","minimum":1},"etag":{"type":"string","maxLength":64},"text":{"type":"string","maxLength":24000}},"required":["encoding","offset","next_offset","total_length","etag","text"],"additionalProperties":true},"photos":{"type":"array","maxItems":2,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string","maxLength":120},"url":{"type":"string","format":"uri","maxLength":2048},"mime_type":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/gif"]},"expires_at":{"type":"string","format":"date-time","maxLength":40},"content_index":{"type":"integer","minimum":1}},"required":["id","label","url","mime_type","expires_at"],"additionalProperties":true}},"photo_status":{"type":"string","enum":["available","none","unavailable"]},"photo_page":{"type":"object","properties":{"total":{"type":"integer","minimum":0},"offset":{"type":"integer","minimum":0},"next_offset":{"type":["integer","null"]}},"required":["total","offset","next_offset"],"additionalProperties":true}},"required":["id","url"],"additionalProperties":true}},{"name":"save_research","title":"Save research to Thriftcraft","description":"Saves an answer to the connected collection as a research entry: the full text, an optional summary, sources, provider and conversation URL. With find_id the entry is attached to that find; without it, the entry goes to the Research Inbox. suggested_details stores proposed title, category, notes, tags and details for later review. Saving research does not change the find’s own fields. Repeating a request with the same request_id returns the original result instead of saving twice. API documentation: https://thriftcraft.io/api/v1/schema","readOnly":false,"inputSchema":{"type":"object","properties":{"request_id":{"type":"string","format":"uuid"},"title":{"type":"string","maxLength":200,"minLength":1},"body":{"type":"string","maxLength":262144,"description":"The full answer text, up to 262,144 characters. Stored without truncation."},"summary":{"type":"string","maxLength":2000},"provider":{"type":"string","maxLength":80,"minLength":1},"find_id":{"type":"string","format":"uuid"},"conversation_url":{"type":"string","format":"uri","maxLength":2048},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048},"title":{"type":"string","maxLength":300}},"required":["url"],"additionalProperties":false},"maxItems":100},"attachments":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","maxLength":512},"label":{"type":"string","maxLength":120}},"required":["path"],"additionalProperties":false},"maxItems":8},"suggested_details":{"type":"object","additionalProperties":true},"attachment_status":{"type":"string","enum":["none","pending","complete","failed"]},"research_date":{"type":"string","format":"date-time","maxLength":40}},"required":["request_id","title"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"find_id":{"type":["string","null"],"format":"uuid"},"version":{"type":"integer","minimum":1,"maximum":9007199254740991},"status":{"type":"string","enum":["saved","deleted","not_found"]},"attachment_status":{"type":"string","enum":["none","pending","complete","failed"]},"url":{"type":"string","format":"uri","maxLength":2048}},"required":["id","version","status"],"additionalProperties":true}},{"name":"preview_find_update","title":"Review changes to a find","description":"Returns the exact before/after changes that the given changes would make to an existing find, without editing it, and a preview_token bound to those changes and the find’s current version. research_id optionally links the change to a saved research entry. details merges only the supplied fields; an empty value clears that field. append_notes and add_tags add to the existing notes and tags. can_apply=false means item updates are turned off for this connection, and the response says where the user can turn them on.","readOnly":true,"inputSchema":{"type":"object","properties":{"find_id":{"type":"string","format":"uuid"},"research_id":{"type":"string","format":"uuid"},"changes":{"type":"object","properties":{"title":{"type":"string","maxLength":200,"minLength":1},"category":{"type":"string","maxLength":60},"notes":{"type":"string","maxLength":5000,"description":"Replaces the existing notes."},"append_notes":{"type":"string","maxLength":5000,"description":"Added after the existing notes, which are kept."},"add_tags":{"type":"array","items":{"type":"string","maxLength":50},"maxItems":20},"details":{"type":"object","properties":{"artist":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"medium":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"material":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"style":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"size":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"brand":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"condition":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"maker":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"era":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."}},"required":[],"additionalProperties":false}},"required":[],"additionalProperties":false}},"required":["find_id","changes"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"find_id":{"type":"string","format":"uuid"},"research_id":{"type":["string","null"],"format":"uuid"},"title":{"type":"string","maxLength":200},"preview_token":{"type":"string","maxLength":64},"can_apply":{"type":"boolean"},"changes":{"type":"array","items":{"type":"object"}},"url":{"type":"string","format":"uri","maxLength":2048}},"required":["id","find_id","preview_token","can_apply","changes"],"additionalProperties":true}},{"name":"update_find","title":"Update a find with approved details","description":"Applies previously previewed changes to an existing find. Requires the preview_token returned by preview_find_update for the same changes, and item-update permission for this connection. If the find changed after the preview, the request fails with a conflict and nothing is written. Repeating a request with the same request_id returns the original result. Returns changed_fields and the find’s link. Cannot change photos, ownership, prices, dimensions or collections, and cannot delete finds.","readOnly":false,"destructive":true,"inputSchema":{"type":"object","properties":{"find_id":{"type":"string","format":"uuid"},"research_id":{"type":"string","format":"uuid"},"changes":{"type":"object","properties":{"title":{"type":"string","maxLength":200,"minLength":1},"category":{"type":"string","maxLength":60},"notes":{"type":"string","maxLength":5000,"description":"Replaces the existing notes."},"append_notes":{"type":"string","maxLength":5000,"description":"Added after the existing notes, which are kept."},"add_tags":{"type":"array","items":{"type":"string","maxLength":50},"maxItems":20},"details":{"type":"object","properties":{"artist":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"medium":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"material":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"style":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"size":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"brand":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"condition":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"maker":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."},"era":{"type":"string","maxLength":80,"description":"Stored as written, including any stated uncertainty. An empty value clears the field."}},"required":[],"additionalProperties":false}},"required":[],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"},"preview_token":{"type":"string","maxLength":64,"minLength":64}},"required":["find_id","changes","request_id","preview_token"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"find_id":{"type":["string","null"],"format":"uuid"},"version":{"type":"integer","minimum":1,"maximum":9007199254740991},"status":{"type":"string","enum":["saved","deleted","not_found"]},"attachment_status":{"type":"string","enum":["none","pending","complete","failed"]},"url":{"type":"string","format":"uri","maxLength":2048},"changed_fields":{"type":"array","items":{"type":"string","maxLength":100}},"changes":{"type":"array","items":{"type":"object"}},"research_id":{"type":["string","null"],"format":"uuid"},"find_url":{"type":"string","format":"uri","maxLength":2048}},"required":["id","find_id","version","status","changed_fields","changes"],"additionalProperties":true}},{"name":"create_find_from_research","title":"Create a find from saved research","description":"Creates a new find from a Research Inbox entry and attaches the entry to it in one step. Ownership defaults to Considering (saved). Requires the entry’s current version.","readOnly":false,"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"request_id":{"type":"string","format":"uuid"},"expected_version":{"type":"integer","minimum":1,"maximum":9007199254740991},"title":{"type":"string","maxLength":200,"minLength":1},"ownership":{"type":"string","enum":["saved","owned"]},"category":{"type":"string","maxLength":60}},"required":["id","request_id","expected_version"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"find_id":{"type":["string","null"],"format":"uuid"},"version":{"type":"integer","minimum":1,"maximum":9007199254740991},"status":{"type":"string","enum":["saved","deleted","not_found"]},"attachment_status":{"type":"string","enum":["none","pending","complete","failed"]},"url":{"type":"string","format":"uri","maxLength":2048}},"required":["id","version","status"],"additionalProperties":true}},{"name":"attach_research","title":"Attach Inbox research to a find","description":"Attaches a Research Inbox entry to an existing find. Requires the entry’s current version.","readOnly":false,"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"request_id":{"type":"string","format":"uuid"},"expected_version":{"type":"integer","minimum":1,"maximum":9007199254740991},"find_id":{"type":"string","format":"uuid"}},"required":["id","request_id","expected_version","find_id"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"find_id":{"type":["string","null"],"format":"uuid"},"version":{"type":"integer","minimum":1,"maximum":9007199254740991},"status":{"type":"string","enum":["saved","deleted","not_found"]},"attachment_status":{"type":"string","enum":["none","pending","complete","failed"]},"url":{"type":"string","format":"uri","maxLength":2048}},"required":["id","version","status"],"additionalProperties":true}},{"name":"get_save_status","title":"Check a research save","description":"Returns the stored result of an earlier write by its request_id. not_found means no write with that request_id has been committed.","readOnly":true,"inputSchema":{"type":"object","properties":{"request_id":{"type":"string","format":"uuid"}},"required":["request_id"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"find_id":{"type":["string","null"],"format":"uuid"},"version":{"type":"integer","minimum":1,"maximum":9007199254740991},"status":{"type":"string","enum":["saved","deleted","not_found"]},"attachment_status":{"type":"string","enum":["none","pending","complete","failed"]},"url":{"type":"string","format":"uri","maxLength":2048}},"required":["status"],"additionalProperties":true}}],"limits":{"answer_bytes":262144,"sources":100,"photos":8,"search_page":50},"retry":"Reuse the exact request and request_id after checking get_save_status."}