Prototype · Preview: every server in the official registry, synced every 30 minutes. Sign in with Google to write reviews.
PopNx MCPMCP servers for people who use AI · explained in plain words

Colour Memory

by DigbyOversion 2.3.5i★ 0iRuns in the cloud
Registry nameio.github.DigbyO/colour-memory

How to install

Overview

Description from the maker (original English)

Colour meaning, history and evidence for AI: 45,000+ source-graded colour records and 91 tools.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs in the cloud
  • Transport: Streamable HTTP
  • Category: Search & AI memory
  • You need to fill in: X-Api-Key

Install

Pick the AI app you use, then copy the settings.

Passed 3/3 checks · What you ask goes through the maker’s server (api.colourmemory.com)

First: which AI do you use?

Pick your app and the steps appear below.

Works with Claude · about 5 min

You need a Colour Memory key (sign up on the maker’s site, may cost money) · Set it up once on claude.ai or the desktop app, then use it in chat · free accounts can add 1

  1. Sign up and create a Colour Memory key

    Open the maker’s site, sign up and create an API key for the next step. It may cost money.

    Open the Colour Memory site ↗

  2. Open Claude’s Connectors page

    CustomizeConnectors

    CustomizeConnectors1+ Add2https://…3Add4
  3. Click “+ Add” → “Add custom connector” and fill in these 2 fields

    Copy each value into the field with the same name in Claude, then click Continue

    Name · NameColour Memory
    Remote MCP server URL · Addresshttps://api.colourmemory.com/mcp

    Under Request headers, add this name and value

    Header nameX-Api-Key
    Value<paste your key here>

    Paste the key only into the app’s field, never into a chat or to anyone

    Leave Authentication as Claude detected it, then click Add

  4. Turn it on in a chat

    +ConnectorsColour Memory

  5. Try it

    Use Colour Memory and tell me what you can do for me, then show me one thing

    ✓ If Claude says it is using Colour Memory or shows a Colour Memory tool in the answer, you are connected

Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version

ChatGPT cannot connect Colour Memory yet

Colour Memory needs your own key to connect, but OpenAI’s help page only describes OAuth sign-in; there is no key option we could verify

What you can do instead

A · Use an app that can connect Colour Memory

  • You need a Colour Memory key (sign up on the maker’s site, may cost money) · Set it up once on claude.ai or the desktop app, then use it in chat · free accounts can add 1
  • You need a Colour Memory key (sign up on the maker’s site, may cost money)
  • You need a Colour Memory key (sign up on the maker’s site, may cost money)
  • You need a Colour Memory key (sign up on the maker’s site, may cost money)

B · Others in Search & AI memory that work with ChatGPT

Picked from the most used in the same category, only ones that connect by address with no key

Works with Claude Code · about 5 min

You need a Colour Memory key (sign up on the maker’s site, may cost money)

  1. Sign up and create a Colour Memory key

    Open the maker’s site, sign up and create an API key for the next step. It may cost money.

    Open the Colour Memory site ↗

  2. Open Terminal

    Mac: press Command+Space and type Terminal · Windows: open PowerShell

  3. Paste this command and press Enter

    claude mcp add --transport http colour-memory https://api.colourmemory.com/mcp --header 'X-Api-Key: your-value'

    Replace “your-value” with your key before pressing Enter

    Paste the key only into the app’s field, never into a chat or to anyone

  4. Type /mcp in Claude Code

    You should see Colour Memory listed as connected

  5. Try it

    Use Colour Memory and tell me what you can do for me, then show me one thing

    ✓ If Claude Code says it is using Colour Memory or shows a Colour Memory tool in the answer, you are connected

Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Works with Cursor · about 5 min

You need a Colour Memory key (sign up on the maker’s site, may cost money)

  1. Sign up and create a Colour Memory key

    Open the maker’s site, sign up and create an API key for the next step. It may cost money.

    Open the Colour Memory site ↗

  2. Click this button to open Cursor

    Open in Cursor

    Cursor asks you to confirm; click Install

  3. Fill in your key

    In the Colour Memory settings, X-Api-Key is empty; add your key and save

    Paste the key only into the app’s field, never into a chat or to anyone

  4. Open the AI chat in Cursor in Agent mode

  5. Try it

    Use Colour Memory and tell me what you can do for me, then show me one thing

    ✓ If Cursor says it is using Colour Memory or shows a Colour Memory tool in the answer, you are connected

Menu names checked against Cursor’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Works with VS Code · about 5 min

You need a Colour Memory key (sign up on the maker’s site, may cost money)

  1. Sign up and create a Colour Memory key

    Open the maker’s site, sign up and create an API key for the next step. It may cost money.

    Open the Colour Memory site ↗

  2. Click this button to open VS Code

    Open in VS Code

    VS Code asks you to confirm; click Install

  3. Fill in your key

    In the Colour Memory settings, X-Api-Key is empty; add your key and save

    Paste the key only into the app’s field, never into a chat or to anyone

  4. Open the AI chat in VS Code in Agent mode

  5. Try it

    Use Colour Memory and tell me what you can do for me, then show me one thing

    ✓ If VS Code says it is using Colour Memory or shows a Colour Memory tool in the answer, you are connected

Menu names checked against VS Code’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Other apps that use MCP, such as Windsurf, Zed or Gemini CLI, each add servers differently. See how in the app list.

See every app that uses MCP →

Address for apps that connect over the web

Addresshttps://api.colourmemory.com/mcp

JSON settings are under “For developers” below

Stuck? Ask people who use Colour Memory💬 Discussion →
For developers: Terminal commands and JSON settings

Over the web

Claude Code

claude mcp add --transport http colour-memory https://api.colourmemory.com/mcp --header 'X-Api-Key: your-value'

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "colour-memory": {
      "url": "https://api.colourmemory.com/mcp",
      "headers": {
        "X-Api-Key": "your-value"
      }
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "colour-memory": {
      "type": "http",
      "url": "https://api.colourmemory.com/mcp",
      "headers": {
        "X-Api-Key": "your-value"
      }
    }
  }
}

Values you fill in

  • X-Api-Key secret HTTP header
    Optional. Many tools work without a key. A free key (colourmemory.com/start) gives 750 archive calls a month and 25 Intelligence credits.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

At a glance

Downloads per weeki
Not on npm/PyPI
Licencei
No licence stated
Connection
Runs in the cloud
Transport
streamable-http
Latest versioni
2.3.5
Published to registryi
Oct 6, 2026
Code last changedi
–
Maker
DigbyO
Repo
–
Registry status
Active

Which apps can use it

Based on how this server connects and on each app’s own docs, checked Nov 10, 2026.

Connect over the internet in

ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast

All apps, with pros and cons →

Related guides

What it can do

Tool names and descriptions exactly as the server reported them on Nov 8, 2026. The maker wrote them, not us; we show them as plain text.

  • query_conceptual

    Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'grief' (returns Ophelia Violet, Titan's Grief), 'toxic Victorian pigments' (returns Nightshade Poison Berry Purple, Victor

  • extract_image_colours

    Extract dominant colours from a photograph using Colour Memory's proprietary k-means++ algorithm. Requires either a public image_url, or an image_id. If you only have a raw uploaded file with no public URL (e.g. a local file path or a ChatGPT file attachment without a usable down

  • query_hex

    Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance.

  • palette_specify

    Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the custo

  • colour_metrics

    Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma and hue angle, and Bradford corresponding colours under two standard illuminants. It also lists what a hex cannot suppor

  • colour_harmonies

    Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838) documented contrast pairing between six named hues (yellow/purple, orange/blue, red/green), with Field's proportional

  • accessibility_check

    Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibility_check calls in one response.

  • accessibility_matrix

    Accept a palette array and return every foreground/background combination with contrast ratio, AA normal, AA large, AAA normal, AAA large pass/fail grades, and a summary. Use this instead of calling accessibility_check multiple times for a palette.

  • accessibility_rules

    Convert a palette WCAG matrix into actionable design-system rules. Returns safe pairs, AA-only pairs, large-text-only pairs, decorative-only pairs, best text colour per background, and component usage rules. Deterministic, no LLM cost.

  • colour_slugs

    Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-grounded name source with dE2000 distance.

  • palette_light_dark

    Generate light-mode and dark-mode role maps from a palette. Analyses LRV, assigns background/surface/text/accent roles for each mode, checks body text contrast safety, and flags missing neutrals. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS

  • accessibility_font

    Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for body text, large text, and UI components.

  • archive_search

    Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical period. Complements conceptual embedding search with exact keyword matching. Examples: 'cerulean' (28 matches, e.g. Bourton

  • colour_combination

    Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summary, and specific deployment rules for the context.

  • palette_strict

    Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] for Japanese only. Use min_relevance to filter weak concept matches. Fixes cross-archive drift when cultural specificity

  • archive_report_document

    Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word file built from archive findings, instead of writing a plain document yourself. Pass the records by the record_id or sl

  • palette_pdf

    Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, provenance notes, RAL nearest match, LRV, chroma, WCAG contrast data, and Colour Memory branding. Use this to create clie

  • palette_audit

    Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, grade, and prioritised fix list. Enterprise quality gate -- use before shipping any palette. Deterministic, no LLM cost.

  • brand_system

    Complete brand colour system in one call. Returns colour roles with archive names, light and dark mode role maps, typography guidance, usage rules per colour, design tokens (CSS, Tailwind, Figma), and citation cards. Deterministic. No LLM cost. The result already carries the rend

  • brand_asset_pack

    Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs to ship. Deterministic. No LLM cost.

  • accessibility_simulate

    Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, linear sRGB), with a flag when a simulated colour had to be clipped to sRGB. Anomalous trichromacy and partial severitie

  • colour_match_paint

    Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene.

  • colour_card

    Look up a named colour and return its hex, archive, provenance, and cultural notes.

  • meta_capabilities

    Return a live inventory of all active endpoints and MCP tools. Use this first to discover what the API can do before making calls. Returns tool count, endpoint list, MCP-exposed tools, and usage notes. Deterministic -- no LLM cost.

  • system_status

    Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at, server_environment). Use this to confirm you're seeing the current deployed schema -- e.g. if a tool you expect (like h

  • colour_story

    Given a hex value, returns a rich narrative about that colour's cultural journey — where it has appeared in history, what it has meant to different civilisations, and what archive names it carries. Essential for image generation prompts, brand storytelling, and creative briefs. E

  • palette_concept

    Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and provenance. Examples: 'Victorian mourning', 'Ottoman court', 'Japanese wabi-sabi', 'Scandinavian winter', 'West African kent

  • colour_mix

    Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its nearest archive match with cultural context. Uses CIE Lab subtractive model for perceptual accuracy. Example: mixing Prussian

  • colour_timeline

    Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entries showing when and where the colour appeared, with primary sources. Use for historical research, provenance chains, an

  • image_palette

    Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provenance. Uses K-means++ extraction; sRGB pixels are read as D65 CIELAB for matching. Returns up to 5 dominant colours, each

  • colour_compare

    Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, plus cultural context on both — which is more authoritative, more saturated, more stable under different illuminants, and

  • colour_cultural_risk

    Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_passport for single colours. Use colour_passport for a general profile; call this directly for palette-level risk checks o

  • design_session

    One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrative, commercial paint matches, WCAG accessibility check, illuminant behaviour, and a ready-made image generation prompt.

  • image_personal

    Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, medium, or deep), and undertone (warm, cool, or neutral). Returns a curated palette of archive colours that genuinely suit

  • style_match

    The colour question every stylist gets asked: does this bag go with this outfit? Submit your outfit items as hex values with labels (dress, bag, shoes, coat, belt, scarf, etc.) and receive a verdict on what works, what clashes, what is missing, and what to add. Pairs are judged o

  • interior_specify

    Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour scheme with 60/30/10 surface assignments, archive colour names with full cultural provenance, Farrow and Ball and Little G

  • house_specify

    Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance (same object, same pattern colourway, same source citation, same designer, same period+institution); where it does not, t

  • palette_generate

    Send a palette of up to 12 slots, locking some with hex values and leaving others empty. Empty slots are filled with the nearest CIEDE2000 archive match, interpolated from the locked anchors. Optional archive filter restricts fills to one archive. Returns full citation — name, ar

  • palette_gradient

    Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor stops are kept true to their source. Choose linear (physically accurate Lab interpolation) or chroma_preserved (LCh int

  • palette_translate

    Map any list of hex values into a target archive using CIEDE2000 nearest-neighbour matching. Each input hex is matched to the closest named colour in the chosen archive, with a delta-e relevance band (exact / close / approximate / loose) and full provenance. Use to translate a cl

  • archive_cliche

    Find the most surprising archive colour for a concept and generate a memorable one-liner subverting the obvious expectation. Supply a concept (e.g. 'love', 'grief', 'luxury', 'power') and optionally the expected colour (e.g. 'red' for love). The archive finds the contradiction an

  • colour_verdict

    Evaluate a hex colour for a specific use case, market, and medium. Returns a decisive verdict: use_with_confidence, use_with_caution, or avoid. Includes strengths, risks, avoid-if scenarios, and better alternatives where needed. Backed by CIEDE2000 archive matching and Claude cul

  • palette_verdict

    Evaluate a palette of 2-8 hex values for a use case, market, and medium. Returns a verdict (strong / strong_with_adjustment / weak / avoid), a score 0-100, the role of each colour, the single biggest weakness, and a concrete suggestion for what to add to fix it. Each colour is ma

  • agent_brief

    Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, then produces: an agent brief (colour direction in prose), colour tokens with hex values and roles, a model-specific imag

  • colour_strategy

    Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hooks, and usage rules. Input: hex + brand_context (category, positioning, audience, channels) + constraints (avoid, must_wo

  • archive_report_brief

    One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, number of colours. Output: ranked colour cards with full provenance, story order, source confidence flags, pull quote, CTA l

  • palette_heritage

    Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and scores its provenance confidence. Detects palette gaps and fills them from the archive. Returns full palette with roles,

  • archive_coverage_gap

    Given a list of themes, report which are well-evidenced in the archive and which are under-evidenced or missing. Returns a coverage matrix: for each theme, entries found, coverage grade (strong/moderate/weak/missing), best match with claim strength, and what source type would be

  • archive_cultural_anachronism

    Check a list of colour entries for anachronism risk. Detects whether the primary source date falls outside the requested period, whether the archive is a known modern source (RacingSilks, FootballStrips), and returns a period_relevance score and safe phrasing. Essential for histo

  • session_brief

    Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support/analogue/provocation/reject), auto-rejects stubs, generates editorial argument, act structure, pull quote, closing line

  • index_resonance

    Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequence are indistinguishable (blood as prognosis, ash as finality). 0.80 = institution mediates the colour (paint as deterre

  • archive_evidence_gap

    Given a hex value and a proposed claim about it, return whether the archive supports that claim, what is missing, what kind of source would be needed, and safe agent wording. This is Colour Memory's anti-hallucination endpoint. It turns the absence of evidence into a forensic fin

  • brand_collision

    Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE2000 distance to each competitor, archive context for each colour, a distinctiveness score (0-100), an ownership verdict

  • brand_report

    One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, colour DNA, strategy verdict, commercial signals, market reading per market, usage rules, palette roles, ecommerce copy,

  • brand_audit

    Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of any kind: colour roles with archive names, the full WCAG accessibility matrix, cultural risk per colour, CSS variables,

  • agent_verify

    Verify that an AI-generated image actually used the colours specified in an agent_brief call. Supply the generated image (URL or base64) and the target palette from agent_brief colour_tokens. Returns a fidelity score 0-100, dE2000 distance per colour, match quality per colour (ac

  • colour_passport

    Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive anchor with dE2000, claim_strength, do_not_say and evidence grade, hex provenance (status, confidence, spectrophotometri

  • colour_passports

    Batch version of colour_passport. Submit up to 20 hex values in one call. Returns a full Colour Passport for each unique hex: colour science, archive anchor, evidence grade, do_not_say constraints, hex provenance, accessibility, and physics. Deduplicates hex values automatically.

  • colour_dna

    Compact semantic fingerprint for a single hex colour. This is one component of colour_passport. Use colour_passport for a general colour profile; use this only when the user explicitly wants the fingerprint format alone. The result already carries the rendered palette and its PNG

  • ecommerce_copy

    Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long description, SEO title, meta description, alt text, Instagram caption, and cross-sell suggestion. Every piece of copy i

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 11, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account DigbyO, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • ✓ Pass

    Endpoint responds

    Responded in 549 ms (HTTP 200)

  • – Not applicable

    Sign-in with OAuth

    No sign-in needed

  • ✓ Pass

    No hidden instructions in tool descriptions

    Read 60 tool descriptions and found no hidden instructions to the AI

Discussion

Ask, share a tip or report that it does not work. Sorted by what people marked helpful.

No posts yet. Be the first to ask or share.

Posts here are written by users, not the PopNx team.

Sign in with Google to post

User reviews

No reviews yet

Sign in with Google to write a review

Compared with others in Search & AI memoryi

  • More stars than 0% of the other 5946 servers in this category
  • Published to the registry more recently than 51% of the other 5946 servers in this category
  • Basic checks equal to or better than 100% of the other 5946 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Colour Memory safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: X-Api-Key

Does it run on my computer or in the cloud?

It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.

Is it still maintained?

The GitHub repo last changed –, and the latest version (2.3.5) reached the registry 36 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT Business and above.

What can I use instead?

In the same category: Ruflo, Context7, Metabase

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Ruflo

Agent teams, swarms, memory and hooks for Claude Code and Codex, served over MCP.

by ruvnetWidely used↓ 74.3K/wk★ 81.4KUpdated today

Runs on your computer

Context7

Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.

by upstashWidely used↓ 1.2M/wk★ 64.6KUpdated 2 days ago

Computer or cloud

Metabase

Lets AI clients search, explore, query, and visualize data in a Metabase instance.

by metabaseWidely used★ 50.3KUpdated 6 months ago

Runs in the cloud

README from the maker

No README found in the repo