{"apiVersion":"v1","directorySlug":"uxxray-mcp-c76693fd4a","title":"UXXRAY","description":"UXXRAY is a growing library of real funnels, pages and sections, measured off live sites rather than uploaded by their authors. Filter by what a page actually contains. Add any site and it gets measured. For AI agents: the corpus is citable — every figure carries its denominator and measurement window. Start: uxxray.com/llms.txt","pageUrl":"https://www.mcpbundles.com/skills/uxxray-mcp-c76693fd4a","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://api.uxxray.com/mcp","hostedMcpUrl":null,"toolCount":52,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.uxxray/uxxray-mcp-c76693fd4a","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"getApiRoot","description":"This self-describing API root — endpoint catalog, corpus counts, links","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Api Root","logicalName":"getApiRoot","displayName":"Get Api Root","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getOpenApi","description":"OpenAPI 3.1 document for this API","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Open Api","logicalName":"getOpenApi","displayName":"Get Open Api","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getLeague","description":"Ranked list of teardowns (?funnel_type=, ?limit=, ?offset=). Paginated: a full page does NOT mean the whole corpus — check the x-uxxray-has-more response header and follow Link rel=\"next\" until it reads false","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"number"},"offset":{"type":"number"},"funnel_type":{"enum":["ecommerce","lander"],"type":"string"}}},"title":"Get League","logicalName":"getLeague","displayName":"Get League","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getLookup","description":"Find a company we have ALREADY x-rayed, by name or domain (?q=stripe, ?q=stripe.com, ?q=https://stripe.com/pricing). Returns the funnel instantly if we hold it, with the date it was measured and how many days ago. When we do not hold it the reply says so EXPLICITLY and hands back the scan URL: found:0 means \"not in our corpus\", never \"this company has no funnel\" and never \"the corpus is empty\". This is name resolution, NOT browsing: for design-task language use /api/v1/library/search, for the ra","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["q"],"properties":{"q":{"type":"string"},"limit":{"type":"number"}}},"title":"Get Lookup","logicalName":"getLookup","displayName":"Get Lookup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getCorpusStats","description":"Corpus-wide aggregates (pct_lack, avg_tactics, evidence)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Corpus Stats","logicalName":"getCorpusStats","displayName":"Get Corpus Stats","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getPatterns","description":"The Conversion Pattern Library — every detected tactic, prevalence, quoted evidence, examples (?funnel_type=)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"funnel_type":{"type":"string"}}},"title":"Get Patterns","logicalName":"getPatterns","displayName":"Get Patterns","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getPattern","description":"One conversion pattern, machine-readable — up to 60 verbatim on-page examples","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["pattern_id"],"properties":{"pattern_id":{"type":"string"},"funnel_type":{"type":"string"}}},"title":"Get Pattern","logicalName":"getPattern","displayName":"Get Pattern","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getTemplates","description":"Page Template Library — recurring section-skeletons real pages are built from, clustered by exact structure","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Templates","logicalName":"getTemplates","displayName":"Get Templates","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getSections","description":"Section-archetype prevalence across fully-crawled pages — how common each band is, where it typically sits, example sites; ?archetype=X returns every real instance with screenshot crop coords (the SECTION layer)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"archetype":{"type":"string"}}},"title":"Get Sections","logicalName":"getSections","displayName":"Get Sections","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getLibraryIndex","description":"THE WHOLE SHELF — every facet, every legal value, real counts, no specimens. Call this FIRST. The inventory is lumpy (hero is in the hundreds, stat_proof is single digits) and these counts are how you find that out before asking for 20 and getting 7","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Library Index","logicalName":"getLibraryIndex","displayName":"Get Library Index","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getLibrarySpecimens","description":"FACETED SPECIMEN RETRIEVAL — you choose the breadth. scope=narrow (5, full receipts incl. verbatim evidence) | broad (20, the band's cropped image + tactic ids — the DEFAULT) | full (the whole roster for the facet: identity + score only). Select on ONE axis: kind (+archetype/template) OR playbook; funnel_type filters either. Every response publishes how many exist, so \"showing 7 of 7 available\" can never be misread as a page of many. exclude_seen_project stops a later round re-serving what you a","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"kind":{"enum":["page","section","element"],"type":"string"},"limit":{"type":"number"},"scope":{"enum":["narrow","broad","full"],"type":"string"},"playbook":{"type":"string"},"template":{"type":"string"},"archetype":{"type":"string"},"per_domain":{"type":"string"},"funnel_type":{"type":"string"},"exclude_seen":{"type":"string"},"exclude_seen_project":{"type":"string"},"exclude_seen_session":{"type":"string"}}},"title":"Get Library Specimens","logicalName":"getLibrarySpecimens","displayName":"Get Library Specimens","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"resolveDesignTask","description":"DESIGN TASK → CORPUS VOCABULARY. \"build_review_section\" → the section archetypes, measured patterns and ready-made queries to use. Exact-match lookup: an unsupported task is reported as unsupported, never guessed","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["task"],"properties":{"task":{"type":"string"},"funnel_type":{"type":"string"}}},"title":"Resolve Design Task","logicalName":"resolveDesignTask","displayName":"Resolve Design Task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getArchetypeAggregates","description":"WHAT THE CORPUS SAYS ABOUT AN ARCHETYPE — measured aggregates with denominators, not examples. Every figure is {value, n} where n is the instances that COULD answer that axis, never the population, so a caller cannot print a number without its coverage. An axis over fewer than 30 answerable instances states NOTHING and is reported in `withheld` with the count that fell short, so a thin answer reads as withheld rather than as a measured absence. Scope it with ?band= or ?min_score= before reading","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["archetype"],"properties":{"band":{"type":"string"},"archetype":{"type":"string"},"min_score":{"type":"number"},"funnel_type":{"type":"string"}}},"title":"Get Archetype Aggregates","logicalName":"getArchetypeAggregates","displayName":"Get Archetype Aggregates","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getSectionSpecimens","description":"SECTION SPECIMENS with receipts — real bands from real funnels, each with crop_url (a real ~1440px webp of the band, or null with a stated reason) plus crop coords onto its full-page screenshot, the funnel's measured /100, and the verbatim on-page evidence for every tactic it runs. Ranked by score. The crops are cut at BUILD time over the listed corpus; scanning a site does not produce them (see steps[].crops_note on a bundle)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"top":{"type":"number"},"task":{"type":"string"},"archetype":{"type":"string"},"funnel_type":{"type":"string"}}},"title":"Get Section Specimens","logicalName":"getSectionSpecimens","displayName":"Get Section Specimens","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getElementSpecimens","description":"ELEMENT SPECIMENS — the atomic UI pieces real funnels are built from (price anchors, ratings, guarantees, no-card notes, countdowns), each a REAL CROPPED IMAGE cut at BUILD time from the funnel's own full-page screenshot, plus the verbatim on-page text of that element. Scanning a site does not produce this material: a walk cuts at most two regions per step and they are a different tier (see steps[].crops_note on a bundle). Unlike section receipts, the text is element-scoped: the detector recorde","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"top":{"type":"number"},"type":{"type":"string"},"funnel_type":{"type":"string"}}},"title":"Get Element Specimens","logicalName":"getElementSpecimens","displayName":"Get Element Specimens","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getPageSpecimens","description":"PAGE SPECIMENS — one real crawled page per specimen, grouped by the MEASURED section sequence it shares with others (the shape). Carries the above-the-fold crop, the whole-page screenshot, the section skeleton the shape was clustered on, and the funnel's measured /100. Ranked by score","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"top":{"type":"number"},"shape":{"type":"string"},"min_score":{"type":"number"},"funnel_type":{"type":"string"}}},"title":"Get Page Specimens","logicalName":"getPageSpecimens","displayName":"Get Page Specimens","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"createVisitor","description":"Issue a VISITOR CAPABILITY TOKEN — the continuity layer. It powers YOUR work (factory projects, likes) and is deliberately NOT an analytics identity: view counts deduplicate on a day-scoped IP hash and never read it. Returned ONCE and stored only as a SHA-256 hash, so it cannot be re-read. Send it back as the x-uxxray-visitor header — a header rather than a cookie so agents, which hold config but not cookies, use the same primitive as browsers","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Create Visitor","logicalName":"createVisitor","displayName":"Create Visitor","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getVisitorMe","description":"Your factory projects, resolved from the x-uxxray-visitor header. Returns a completeness note stating what is NOT listed — work from another device, from before the token existed, or created after clearing it is unreachable here and recoverable only by its own review link. Claiming full history would be a fabrication","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Visitor Me","logicalName":"getVisitorMe","displayName":"Get Visitor Me","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getEngagementCounts","description":"Batch engagement counts for the specimens on one page. Fetched at RUNTIME and never baked into the static build, because a build-time number is a claim about when the page was generated dressed up as a current one. A ref with no row is OMITTED rather than returned as 0 — never counted and measured-zero are different facts. Carries the definition of the number","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["refs"],"properties":{"refs":{"type":"string"}}},"title":"Get Engagement Counts","logicalName":"getEngagementCounts","displayName":"Get Engagement Counts","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"recordEngagement","description":"Record ONE deduped engagement event for a specimen. Deduplicated per visitor per day on a one-way, day-scoped IP hash — no cookie, no device storage, no identity. Agent visits COUNT (this is an agent-oriented product); 2000 pings in five seconds count once. Build, canary and internal traffic are excluded. The response carries the exact definition of the number, and returns recorded:false when the visitor was already counted today — that is a normal outcome, not an error","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["kind","ref"],"properties":{"ref":{"type":"string"},"kind":{"enum":["view","like"],"type":"string"}}},"title":"Record Engagement","logicalName":"recordEngagement","displayName":"Record Engagement","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"patchFactorySession","description":"Change a session's visibility and/or record sources discovered mid-work (#177) — body needs privacy, source_specimens, or both. REQUIRES the write credential (x-uxxray-session-token header): editing is an owner action, and the review link alone must not authorise it. private means UNLISTED, not access-controlled — the id is still a capability. source_specimens APPENDS to what is already stored, it never replaces — a worker that discovers a specimen it used in round 2 does not need to resend roun","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id"],"properties":{"privacy":{"enum":["public","private"],"type":"string"},"session_id":{"type":"string"},"source_specimens":{"type":"array","items":{"type":"string"}}}},"title":"Patch Factory Session","logicalName":"patchFactorySession","displayName":"Patch Factory Session","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"searchSpecimens","description":"SPECIMEN SEARCH — free text resolved into explicit MEASURED filters (archetype, tactic, funnel type, min score), then real specimens with receipts. Deterministic, not semantic: any term it does not understand is REPORTED as unmatched rather than silently ignored","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["q"],"properties":{"q":{"type":"string"},"top":{"type":"number"},"min_score":{"type":"number"},"funnel_type":{"type":"string"}}},"title":"Search Specimens","logicalName":"searchSpecimens","displayName":"Search Specimens","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getInspirationBrief","description":"THE INSPIRATION BRIEF — a SHORTLIST for one design task: resolved taxonomy, 2-3 selected specimens with receipts, what to read them for, and the originality instruction. Deterministic, so asking twice returns the same specimens; the response names its own pool size and links the full roster. For the whole library start at /api/v1/library/index instead","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["task"],"properties":{"top":{"type":"number"},"task":{"type":"string"},"funnel_type":{"type":"string"}}},"title":"Get Inspiration Brief","logicalName":"getInspirationBrief","displayName":"Get Inspiration Brief","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getPlaybooks","description":"Funnel-playbook registry + which crawled funnels match each (measured surface matches, quoted evidence; bundles carry per-funnel matches as bundle.playbooks)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Playbooks","logicalName":"getPlaybooks","displayName":"Get Playbooks","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getPlaybook","description":"One funnel playbook, machine-readable: model summary + cheat sheet + how to unlock the prompt templates","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}}},"title":"Get Playbook","logicalName":"getPlaybook","displayName":"Get Playbook","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getCurriculum","description":"THE AGENT STUDY PATH (markdown) — how to learn conversion design from this corpus: top scorers → bundles → screenshots → playbook → page → section → copy","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Curriculum","logicalName":"getCurriculum","displayName":"Get Curriculum","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"postRate","description":"★ Rate any result 1-5 — body {rating, context?, via: \"user\"(relayed human)|\"agent\", comment?}. Terminal responses carry the ask as _rate","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["rating"],"properties":{"via":{"enum":["user","agent"],"type":"string"},"rating":{"type":"number"},"comment":{"type":"string"},"context":{"type":"string"}}},"title":"Post Rate","logicalName":"postRate","displayName":"Post Rate","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getRateSummary","description":"Rating summary — overall count/avg + breakdown by context","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Rate Summary","logicalName":"getRateSummary","displayName":"Get Rate Summary","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"postScanRequest","description":"Request a new site be scanned (queued for manual/batch capture) — body {url, email?}","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["url"],"properties":{"url":{"type":"string"},"email":{"type":"string"}}},"title":"Post Scan Request","logicalName":"postScanRequest","displayName":"Post Scan Request","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"postScan","description":"Live on-demand x-ray — real Browser Rendering capture, async. Body {url, mode?, steps?, maxSteps?, force?}. mode=\"auto\" (default) auto-discovers the funnel (entry → pricing/product → signup/checkout); \"single\" scans just the entry page; \"defined\" walks the exact same-domain URLs in steps[]. maxSteps caps auto/defined (default 4, max 6). Returns 202 {jobId,status} or 200 {status:done,slug} if cached within 24h; {\"force\":true} bypasses the cache.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["url"],"properties":{"url":{"type":"string"},"mode":{"enum":["auto","single","defined"],"type":"string"},"force":{"type":"boolean"},"steps":{"type":"array","items":{"type":"string"}},"maxSteps":{"type":"number"}}},"title":"Post Scan","logicalName":"postScan","displayName":"Post Scan","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getScanStatus","description":"Poll a live scan job — {status, slug?, score?, band?, blocked?, error?}","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["jobId"],"properties":{"jobId":{"type":"string"}}},"title":"Get Scan Status","logicalName":"getScanStatus","displayName":"Get Scan Status","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getVs","description":"Deterministic side-by-side compare page (HTML) for two teardowns","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["a","b"],"properties":{"a":{"type":"string"},"b":{"type":"string"}}},"title":"Get Vs","logicalName":"getVs","displayName":"Get Vs","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"postPlaybookUnlock","description":"Unlock a playbook's full prompt templates — body {email, playbook, source?}; returns {playbook:{prompts_md, cheat_md}}","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["email","playbook"],"properties":{"email":{"type":"string"},"source":{"type":"string"},"playbook":{"type":"string"}}},"title":"Post Playbook Unlock","logicalName":"postPlaybookUnlock","displayName":"Post Playbook Unlock","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"postPlaybookFeedback","description":"Report whether a playbook was useful — body {playbook, useful, comment?, email?, via?}","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["playbook"],"properties":{"via":{"enum":["agent","widget"],"type":"string"},"email":{"type":"string"},"useful":{"type":"boolean"},"comment":{"type":"string"},"playbook":{"type":"string"}}},"title":"Post Playbook Feedback","logicalName":"postPlaybookFeedback","displayName":"Post Playbook Feedback","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getFactorySessions","description":"List Design Factory sessions. Anonymous callers see ONLY sessions explicitly created with privacy:\"public\" — private sessions are reachable solely by someone who already holds the id","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"number"}}},"title":"Get Factory Sessions","logicalName":"getFactorySessions","displayName":"Get Factory Sessions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"postFactorySession","description":"Create a Design Factory session — PRIVATE by default; returns a write credential ONCE that is required to register concepts (header x-uxxray-session-token). The session_id alone is the review link: safe to hand a human, allows reading and feedback, not writing. Create — body {task, project?, target?, source_specimens?, agent?, privacy?}; external AI agents register concepts into it","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["task"],"properties":{"task":{"type":"string"},"agent":{"type":"string"},"target":{"type":"string"},"privacy":{"enum":["private","unlisted"],"type":"string"},"project":{"type":"string"},"source_specimens":{"type":"array","items":{"type":"string"}}}},"title":"Post Factory Session","logicalName":"postFactorySession","displayName":"Post Factory Session","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getFactorySession","description":"Get one Design Factory session, its registered concepts, latest feedback, and agent contract","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id"],"properties":{"session_id":{"type":"string"}}},"title":"Get Factory Session","logicalName":"getFactorySession","displayName":"Get Factory Session","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"postFactoryConcept","description":"Register an original concept into a session. REQUIRES the write credential from session creation, sent as the x-uxxray-session-token header; the review link alone will not authorise it. artifact must carry non-empty html or css","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id","concept_id"],"properties":{"path":{"type":"string"},"group":{"type":"string"},"status":{"enum":["draft","refined","selected","archived"],"type":"string"},"sources":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"artifact":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"brief_md":{"type":"string"},"concept_id":{"type":"string"},"session_id":{"type":"string"},"version_label":{"type":"string"},"parent_concept_id":{"type":"string"}}},"title":"Post Factory Concept","logicalName":"postFactoryConcept","displayName":"Post Factory Concept","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getFactorySessionFeedback","description":"Get latest session-scoped feedback as both raw verdicts and an agent-ready refinement summary","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id"],"properties":{"session_id":{"type":"string"}}},"title":"Get Factory Session Feedback","logicalName":"getFactorySessionFeedback","displayName":"Get Factory Session Feedback","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"postFactorySessionFeedback","description":"Record session-scoped concept feedback — body {concept_id, starred?, rating?, comment?, tags?}","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id","concept_id"],"properties":{"tags":{"type":"array","items":{"type":"string"}},"rating":{"type":"number"},"comment":{"type":"string"},"starred":{"type":"boolean"},"concept_id":{"type":"string"},"session_id":{"type":"string"}}},"title":"Post Factory Session Feedback","logicalName":"postFactorySessionFeedback","displayName":"Post Factory Session Feedback","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"patchFactoryConcept","description":"Commit a round's winner (#159 PART B) — body {status:\"selected\"}. REQUIRES the write credential (x-uxxray-session-token header), same as concept registration: the review link alone must not decide a session. Marks this concept selected, archives every OTHER direction's root, stamps the session's decided_concept_id/decided_at, and returns round_two_seed — the winner's brief + comment, every REJECTED concept's comment labelled as such, the source specimens already used, and both round-two branches","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id","concept_id","status"],"properties":{"status":{"enum":["selected"],"type":"string"},"concept_id":{"type":"string"},"session_id":{"type":"string"}}},"title":"Patch Factory Concept","logicalName":"patchFactoryConcept","displayName":"Patch Factory Concept","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getFactoryArtifact","description":"Get the portable artifact bundle for one generated concept: HTML/CSS/tokens/adapters/source provenance when registered","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id","concept_id"],"properties":{"concept_id":{"type":"string"},"session_id":{"type":"string"}}},"title":"Get Factory Artifact","logicalName":"getFactoryArtifact","displayName":"Get Factory Artifact","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"postReportDispute","description":"Report a tactic we missed on a report — body {slug, tactic_id, url?, note?, email?, via?}; logged for detector review, not auto-applied","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","tactic_id"],"properties":{"url":{"type":"string"},"via":{"enum":["agent","widget"],"type":"string"},"note":{"type":"string"},"slug":{"type":"string"},"email":{"type":"string"},"tactic_id":{"type":"string"}}},"title":"Post Report Dispute","logicalName":"postReportDispute","displayName":"Post Report Dispute","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getTeardown","description":"Full teardown — all device variants, score, funnel steps","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string"}}},"title":"Get Teardown","logicalName":"getTeardown","displayName":"Get Teardown","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getBundle","description":"One self-contained JSON with everything for one site (?include=, ?exclude=) — the recommended single fetch for agents","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string"},"exclude":{"type":"string"},"include":{"type":"string"}}},"title":"Get Bundle","logicalName":"getBundle","displayName":"Get Bundle","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getTokens","description":"Design tokens (?format=json|w3c|tailwind|css). The json form carries the five-slot `tokens` export UNCHANGED plus a `design` object holding what those slots were derived from: the full palette ordered by usage with usage_pct, weighted ink candidates, the real type scale and weights, EVERY radius, and the measured roles with any collisions NAMED rather than resolved by inventing a colour. Page-scoped. No spacing field — nothing measures spacing","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string"},"format":{"enum":["json","w3c","tailwind","css"],"type":"string"}}},"title":"Get Tokens","logicalName":"getTokens","displayName":"Get Tokens","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getBrief","description":"Machine-generated build-brief markdown","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string"}}},"title":"Get Brief","logicalName":"getBrief","displayName":"Get Brief","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getFavicon","description":"Favicon image, streamed from R2","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string"}}},"title":"Get Favicon","logicalName":"getFavicon","displayName":"Get Favicon","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getReport","description":"Pre-rendered shareable report HTML (self-heals from D1/R2 if not yet rendered)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string"}}},"title":"Get Report","logicalName":"getReport","displayName":"Get Report","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getOgImage","description":"Branded 1200x630 social card image, composed on demand from the latest hero screenshot","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string"},"force":{"type":"boolean"}}},"title":"Get Og Image","logicalName":"getOgImage","displayName":"Get Og Image","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getScreenshot","description":"One step screenshot/crop, streamed from R2 (e.g. path=\"01-home/hero.png\")","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","path"],"properties":{"path":{"type":"string"},"slug":{"type":"string"}}},"title":"Get Screenshot","logicalName":"getScreenshot","displayName":"Get Screenshot","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"scan_and_wait","description":"Convenience sugar — NOT a 1:1 API mirror like the other tools. POSTs /api/v1/scan then polls GET /api/v1/scan/{jobId} every 2s until status is done/error, capped at ~90s, and returns the final result directly instead of making you manage the async job loop. For raw control, use the generated postScan + getScanStatus tools instead.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["url"],"properties":{"url":{"type":"string"},"mode":{"enum":["auto","single","defined"],"type":"string"},"force":{"type":"boolean"},"steps":{"type":"array","items":{"type":"string"}},"maxSteps":{"type":"number"}}},"title":"Scan and wait (convenience)","logicalName":"scan_and_wait","displayName":"Scan and wait (convenience)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=UXXRAY&config=eyJ1cmwiOiAiaHR0cHM6Ly9hcGkudXh4cmF5LmNvbS9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22UXXRAY%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.uxxray.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22UXXRAY%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.uxxray.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=UXXRAY&connectorUrl=https%3A%2F%2Fapi.uxxray.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"UXXRAY\" --url \"https://api.uxxray.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/uxxray-mcp-c76693fd4a","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/uxxray-mcp-c76693fd4a/tools/{tool}","mcpServerUrl":"https://api.uxxray.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/uxxray-mcp-c76693fd4a?live=1"}