{"openapi":"3.1.0","info":{"title":"Harbor","version":"1.0.0","description":"Personal list board. Send a Harbor API key or an OAuth access token as Authorization: Bearer. Read tools need board:read. Changes need board:write."},"servers":[{"url":"https://memoairem.shipstime.app"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"security":[{"bearerAuth":[]}],"paths":{"/api/v1/me":{"get":{"operationId":"getMe","summary":"Who the token belongs to","responses":{"200":{"description":"Account and scopes"}}}},"/api/v1/lists":{"get":{"operationId":"listLists","summary":"List every list, with open and done counts","responses":{"200":{"description":"Lists"}}},"post":{"operationId":"createList","summary":"Create a list, or return the existing one with the same name","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":80}}}}}},"responses":{"201":{"description":"List"}}}},"/api/v1/lists/{listId}":{"delete":{"operationId":"deleteList","summary":"Delete a list and its items","parameters":[{"name":"listId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"}}}},"/api/v1/lists/{listId}/items":{"get":{"operationId":"listItems","summary":"Items on one list","parameters":[{"name":"listId","in":"path","required":true,"schema":{"type":"string"}},{"name":"include_done","in":"query","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Items"}}},"post":{"operationId":"addItem","summary":"Add an item","parameters":[{"name":"listId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"title":{"type":"string","maxLength":240},"notes":{"type":"string","maxLength":2000},"due_on":{"type":"string","description":"YYYY-MM-DD"}}}}}},"responses":{"201":{"description":"Item"}}}},"/api/v1/items/{itemId}":{"get":{"operationId":"getItem","summary":"One item","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Item"}}},"patch":{"operationId":"updateItem","summary":"Update an item. Omit a field to leave it. Empty notes or due_on clears it.","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"notes":{"type":"string"},"due_on":{"type":"string"},"list":{"type":"string","description":"List id to move the item"},"done":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Item"}}},"delete":{"operationId":"deleteItem","summary":"Permanently remove an item","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"}}}},"/api/v1/items/{itemId}/complete":{"post":{"operationId":"completeItem","summary":"Mark an item done. It stays on the list.","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Item"}}}},"/api/v1/items/{itemId}/reopen":{"post":{"operationId":"reopenItem","summary":"Mark an item not done","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Item"}}}},"/api/v1/records":{"get":{"operationId":"listRecords","summary":"MemoAirem records. Pass since to include edits and deletions after that millisecond timestamp.","parameters":[{"name":"since","in":"query","schema":{"type":"integer"},"description":"Millisecond timestamp. Omit for live records only."}],"responses":{"200":{"description":"Records"}}},"post":{"operationId":"createRecord","summary":"Create a MemoAirem record. A newer updated_at wins when the id already exists.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"id":{"type":"string"},"type":{"type":"string"},"title":{"type":"string"},"date":{"type":"string","description":"YYYY-MM-DD"},"time":{"type":"string","description":"HH:MM"},"location":{"type":"string"},"people":{"type":"string"},"notes":{"type":"string"},"via":{"type":"string"},"thumb":{"type":"string"},"updated_at":{"type":"integer"}}}}}},"responses":{"201":{"description":"Record"}}}},"/api/v1/records/{recordId}":{"get":{"operationId":"getRecord","summary":"One live MemoAirem record","parameters":[{"name":"recordId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Record"}}},"put":{"operationId":"upsertRecord","summary":"Create or replace a record. Last updated_at wins.","parameters":[{"name":"recordId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"date":{"type":"string"},"time":{"type":"string"},"location":{"type":"string"},"people":{"type":"string"},"notes":{"type":"string"},"via":{"type":"string"},"thumb":{"type":"string"},"updated_at":{"type":"integer"}}}}}},"responses":{"200":{"description":"Record"}}},"delete":{"operationId":"deleteRecord","summary":"Remove a record. Sync clients see a deletion tombstone.","parameters":[{"name":"recordId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"}}}},"/api/v1/query":{"post":{"operationId":"queryRecords","summary":"Ask a plain-language question of the MemoAirem records.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["q"],"properties":{"q":{"type":"string"}}}}}},"responses":{"200":{"description":"Matching records"}}}},"/api/v1/search":{"get":{"operationId":"searchBoard","summary":"Search titles and notes","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":50}}],"responses":{"200":{"description":"Matching items"}}}}},"x-mcp":{"url":"https://memoairem.shipstime.app/mcp","transport":"streamable-http","scopes":["board:read","board:write"]}}