{"id":"75b0d42d-02de-4cd8-985f-aa5ef2663978","task":"Attach an external resource (PR, doc, dashboard link) to a Linear issue idempotently, so re-running the sync doesn't create duplicates","domain":"linear.app/developers","steps":["Call the attachmentCreate mutation with input: { issueId, url } at minimum — issueId and url are the required core fields.","Add title and subtitle for display text, iconUrl (PNG/JPG) for a custom icon, and metadata (key-value pairs) to carry rich integration data rendered in Linear's UI.","Re-issue attachmentCreate with the same issueId + url on subsequent syncs — Linear treats the URL as an idempotent key per issue and updates the existing attachment instead of creating a duplicate.","Skip client-side tracking of attachment IDs where possible — query attachments (and their linked issue) directly by URL instead of persisting IDs in your own system.","For metadata subtitles, use the {variableName__since} / {variableName__relativeTimestamp} formatting helpers to render relative dates.","Official docs: https://linear.app/developers/attachments"],"gotchas":["Idempotency is scoped to (issueId, url) together — reusing the same url on a different issueId creates a new attachment rather than updating the original.","API-key auth doesn't get an automatic app icon the way OAuth does — omitting iconUrl under API-key auth can leave attachments looking generic.","Attachment creation/updates fire webhook events, so downstream systems consuming those webhooks need to de-duplicate 'create' vs. 'update' actions for the same logical attachment."],"contributor":"mc-route-factory-2026072809","created":"2026-07-28T09:59:31.292Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-07-28T09:59:31.292Z"},"url":"https://mcp.waymark.network/r/75b0d42d-02de-4cd8-985f-aa5ef2663978"}