{"serverInfo": {"name": "AddMyLegacy", "title": "AddMyLegacy", "version": "1.0.0+78d5e92969"}, "description": "Document, verify, share, and license intellectual assets from a chat app.", "documentationUrl": "https://addmylegacy.com/llms.txt", "protocolVersion": "2025-06-18", "transport": {"type": "streamable-http", "endpoint": "https://addmylegacy.com/mcp"}, "capabilities": {"tools": {"listChanged": false}}, "authentication": {"required": true, "schemes": ["oauth2"], "protectedResourceMetadata": "https://addmylegacy.com/.well-known/oauth-protected-resource/mcp"}, "instructions": "AddMyLegacy connector for the signed-in account. Public certificate, license, and world-gallery reads are available on this connection. Other tools act as this user. The account holder approved access in the browser with a passkey (Face ID, Touch ID, or another device passkey) or the 6-digit email code. Never put file bytes in tool arguments: to add a file, call create_upload, PUT the file to the returned URL, then call attach_upload. Then call declare_rights with the account defaults, then finalize_my_asset. Delete still requires the email confirmation code.", "tools": [{"name": "asset_processing_status", "title": "Asset processing status", "description": "List processing jobs for an asset owned by the authorized user.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}}, "required": ["asset_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "attach_upload", "title": "Attach an uploaded file", "description": "After the PUT to upload_url succeeds, attach the file to the asset. The asset moves to uploaded, the same state the website sets. SHA-256 and duplicate checks run in the background; read them later with get_my_asset. Call declare_rights with the account defaults, then finalize_my_asset.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}, "upload_id": {"type": "string"}}, "required": ["asset_id", "upload_id"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "check_permission_grant_use", "title": "Check permission grant use", "description": "Check whether a permission grant allows a requested use.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"permission_grant_id": {"type": "string"}, "ai_training": {"type": "boolean"}, "commercial": {"type": "boolean"}}, "required": ["permission_grant_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "confirm_sensitive_action_code", "title": "Confirm an email code", "description": "Confirm a 6-digit code the account holder received by email. Returns the verification id to pass into the sensitive tool. The code is single-use.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"verification_id": {"type": "string"}, "code": {"type": "string"}, "purpose": {"type": "string", "enum": ["delete_asset"]}, "target_id": {"type": "string"}}, "required": ["verification_id", "code", "purpose", "target_id"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "create_asset", "title": "Create an asset draft", "description": "Create a draft asset for the authorized user, using the same metadata checks as the API. Then add the file with create_upload and attach_upload. asset_type is optional; it is set from the uploaded file (use other for CAD, code, datasets, and archives).\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"title": {"type": "string"}, "description": {"type": "string"}, "asset_type": {"type": "string", "enum": ["video", "audio", "photo", "2d_art", "3d_object", "document", "other"]}, "artist_name": {"type": "string"}, "medium": {"type": "string"}, "physical_dimensions": {"type": "string"}, "material": {"type": "string"}, "usage_goal": {"type": "string"}, "platform_exhibition_consent": {"type": "boolean"}}, "required": ["title"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "create_license_offer", "title": "Create a license offer", "description": "Create a license offer for an asset the authorized user owns. Creation fees and activation follow the same rules as the API.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}, "license_template_id": {"type": "integer"}, "price_cents": {"type": "integer", "minimum": 0}, "scope": {"type": "object"}, "distribution_mode": {"type": "string"}}, "required": ["asset_id", "license_template_id", "price_cents"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "create_preservation_order", "title": "Create a preservation order", "description": "Submit a preservation order for the authorized user. Payment still happens on the website.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"package": {"type": "string", "enum": ["basic", "pro", "premium", "gallery"]}, "object_type": {"type": "string"}}, "required": ["package"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "create_upload", "title": "Start a file upload", "description": "Get a short-lived URL to upload one file to a draft asset. PUT the raw file bytes to upload_url with the returned headers, then call attach_upload with upload_id. Any file type is accepted (images, video, audio, 3D, documents, CAD, code, datasets, archives); executables are refused. The asset type is set from the file. Do not put file contents in tool arguments.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}, "filename": {"type": "string", "description": "Original file name, including the extension."}, "size": {"type": "integer", "minimum": 1, "description": "File size in bytes."}, "content_type": {"type": "string", "description": "MIME type, e.g. image/png. Optional."}}, "required": ["asset_id", "filename", "size"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "declare_rights", "title": "Declare rights", "description": "Copy the account rights profile onto an owned asset. The account holder already approved this connector, so no email code is required. Pass use_account_defaults true. Then call finalize_my_asset.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}, "use_account_defaults": {"type": "boolean", "description": "Must be true. The server copies the account rights profile."}}, "required": ["asset_id", "use_account_defaults"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "delete_my_asset", "title": "Delete my asset", "description": "Soft-delete an asset. Requires the website email confirmation: call request_sensitive_action_code, then confirm_sensitive_action_code, then pass verification_id and the exact confirm_filename (the original file name, or the title).\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}, "verification_id": {"type": "string"}, "confirm_filename": {"type": "string"}}, "required": ["asset_id", "verification_id", "confirm_filename"]}, "annotations": {"readOnlyHint": false, "destructiveHint": true, "openWorldHint": false}}, {"name": "finalize_my_asset", "title": "Finalize my asset", "description": "Issue the certificate for an owned asset that already has files and a rights declaration. Call declare_rights with the account defaults first. No email code.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}}, "required": ["asset_id"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_certificate_audit_reference", "title": "Get certificate audit reference", "description": "Audit-log anchor metadata for a certificate.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"certificate_id": {"type": "string"}}, "required": ["certificate_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_certificate_document", "title": "Get certificate document", "description": "Full public verification document for a certificate.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"certificate_id": {"type": "string"}}, "required": ["certificate_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_certificate_signing_key", "title": "Get certificate signing public key", "description": "Ed25519 public key PEM used to verify certificates. The private key is never returned.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {}}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_certificate_transparency", "title": "Get certificate transparency record", "description": "Public transparency payload for a certificate.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"certificate_id": {"type": "string"}}, "required": ["certificate_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_evidence_package_manifest", "title": "Get evidence package manifest", "description": "Evidence package manifest and hash for a certificate.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"certificate_id": {"type": "string"}}, "required": ["certificate_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_license_credential", "title": "Get license credential", "description": "Public credential for a permission grant.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"permission_grant_id": {"type": "string"}}, "required": ["permission_grant_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_my_asset", "title": "Get my asset", "description": "Fetch one asset owned by the authorized user, with its files (name, MIME type, size, SHA-256).\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}}, "required": ["asset_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_ownership_credential", "title": "Get ownership credential", "description": "Public ownership credential for a certificate.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"certificate_id": {"type": "string"}}, "required": ["certificate_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_public_license_offer", "title": "Get a public license offer", "description": "Read an active license offer by its public token. This does not increment the buyer view counter.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"token": {"type": "string"}}, "required": ["token"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "get_rights_policy", "title": "Get rights policy", "description": "ODRL rights policy JSON for a certificate rights-policy id.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"rights_policy_id": {"type": "string"}}, "required": ["rights_policy_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "list_asset_permission_grants", "title": "List public permission grants", "description": "Active permission grants for an asset, with verify URLs.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}}, "required": ["asset_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "list_license_templates", "title": "List license templates", "description": "List active license templates. Same data as GET /api/v1/license-templates/.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {}}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "list_my_assets", "title": "List my assets", "description": "List assets owned by the authorized user. To add a file, use create_upload and attach_upload.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"limit": {"type": "integer", "minimum": 1, "maximum": 20}, "offset": {"type": "integer", "minimum": 0, "maximum": 200}}}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "list_my_license_offers", "title": "List my license offers", "description": "List license offers created by the authorized user.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"limit": {"type": "integer", "minimum": 1, "maximum": 20}, "offset": {"type": "integer", "minimum": 0, "maximum": 200}}}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "list_my_preservation_orders", "title": "List my preservation orders", "description": "List preservation orders for the authorized user.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"limit": {"type": "integer", "minimum": 1, "maximum": 20}, "offset": {"type": "integer", "minimum": 0, "maximum": 200}}}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "request_sensitive_action_code", "title": "Email a confirmation code", "description": "Send the same 6-digit email code the website uses before a sensitive action. Currently used before delete_my_asset. The code is emailed to the account holder and is not included in this response.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"purpose": {"type": "string", "enum": ["delete_asset"]}, "target_id": {"type": "string"}}, "required": ["purpose", "target_id"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "update_my_asset", "title": "Update my asset", "description": "Update metadata on an asset owned by the authorized user.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}, "title": {"type": "string"}, "description": {"type": "string"}, "visibility": {"type": "string"}, "platform_exhibition_consent": {"type": "boolean"}}, "required": ["asset_id"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "verify_certificate", "title": "Verify a certificate", "description": "Verify a proof certificate by id and optional file SHA-256. Same data as the public verify API.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"certificate_id": {"type": "string"}, "hash": {"type": "string", "description": "Optional SHA-256 hex of the file."}}, "required": ["certificate_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "verify_evidence_event", "title": "Verify an evidence event", "description": "Public verification summary for an external evidence event.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"event_id": {"type": "string"}}, "required": ["event_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "whoami", "title": "Who am I", "description": "Return the account this connector is authorized to act as.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {}}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "world_associate_observer", "title": "Associate an observer with placements", "description": "Rank nearby placements for a live observer position. Does not change stored poses.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"latitude": {"type": "number"}, "longitude": {"type": "number"}, "radius_m": {"type": "integer"}, "heading_degrees": {"type": "number"}, "floor_index": {"type": "integer"}, "place_name": {"type": "string"}, "card_text": {"type": "string"}, "room_type": {"type": "string"}}, "required": ["latitude", "longitude"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "world_comment", "title": "Comment on a placement", "description": "Add a comment on a published placement as the authorized user.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"placement_id": {"type": "string"}, "body": {"type": "string"}}, "required": ["placement_id", "body"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "world_my_placements", "title": "My world placements", "description": "List World Gallery placements created by the authorized user.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {}}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "world_nearby_placements", "title": "Nearby world placements", "description": "List published World Gallery placements near a latitude and longitude. Same data as the public nearby API.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"latitude": {"type": "number"}, "longitude": {"type": "number"}, "radius_m": {"type": "integer"}}, "required": ["latitude", "longitude"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "world_place_asset", "title": "Place a work in the world", "description": "Place a gallery-approved 3D work at a GPS coordinate as the authorized user.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"asset_id": {"type": "string"}, "latitude": {"type": "number"}, "longitude": {"type": "number"}, "title": {"type": "string"}, "description": {"type": "string"}, "place_name": {"type": "string"}, "visibility_radius_m": {"type": "integer"}}, "required": ["asset_id", "latitude", "longitude"]}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "openWorldHint": false}}, {"name": "world_placement_detail", "title": "World placement detail", "description": "Read one published placement and its comments. This read does not increment the view counter.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"placement_id": {"type": "string"}}, "required": ["placement_id"]}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}, {"name": "world_remove_placement", "title": "Remove a world placement", "description": "Remove a placement when the authorized user is allowed to remove it.\n\nRequires the account holder to authorize this connector (passkey or email code).", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"placement_id": {"type": "string"}}, "required": ["placement_id"]}, "annotations": {"readOnlyHint": false, "destructiveHint": true, "openWorldHint": false}}, {"name": "world_search_placeable_assets", "title": "Search placeable works", "description": "Search gallery-approved 3D works that can be placed. Pass mine=true after authorization to limit the search to your works.\n\nPublic read. Available after the connector is authorized. It does not use private account data.", "inputSchema": {"type": "object", "additionalProperties": false, "properties": {"query": {"type": "string"}, "mine": {"type": "boolean"}}}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "openWorldHint": false}}]}