Skip to main content
Glama

mcp-uxhints

MCP (Model Context Protocol) server that exposes the uxhints.com catalog of bite-sized UX and product-design hints as MCP tools over stdio. Content comes from the site's public WordPress REST API (converted to clean Markdown), served through a local cache so tool calls are instant and work offline.

Prerequisite: Node.js 18 or newer. No build step — npx downloads and runs the published package, and the bundled catalog snapshot lets the first tool call work with zero network.

Register the server in your MCP client, then restart the client.

OpenCode

Add to opencode.json:

{
  "mcp": {
    "mcp-uxhints": {
      "type": "local",
      "command": ["npx", "-y", "mcp-uxhints"],
      "enabled": true
    }
  }
}

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "mcp-uxhints": {
      "command": "npx",
      "args": ["-y", "mcp-uxhints"]
    }
  }
}

Note: do not run npx mcp-uxhints from inside your own clone of this repository — npm resolves the local package.json and fails with command not found. Any other directory works.

Related MCP server: mcp-maintainer-toolkit

Install from source (alternative)

For development or pinning a local build:

git clone https://github.com/Mateodioev/mcp-uxhints.git
cd mcp-uxhints
npm install && npm run build

Then point your client at the built file instead of npx:

  • OpenCode: "command": ["node", "/absolute/path/mcp-uxhints/build/index.js"]

  • Claude Desktop: "command": "node", "args": ["/absolute/path/mcp-uxhints/build/index.js"]

Tools

Tool

What it does

list_categories

List all categories with slugs and hint counts.

list_hints

Paginated hint list, optionally filtered by category slug.

search_hints

Local search over title, excerpt and content; case- and diacritic-insensitive, title matches first.

get_hint

One hint by id or slug (exactly one), full content as Markdown.

random_hint

One random hint, full content as Markdown.

refresh_hint_catalog

Force a live sync and rewrite the local cache.

Typical flow: list_categorieslist_hintsget_hint. Slugs never include the category prefix (occams-razor-law-in-ux-design, not ux-laws/occams-razor-law-in-ux-design).

Caching

Tool calls read from a local catalog cache (default TTL 24h) instead of hitting the API every time. Resolution order:

Layer

Location

Role

1. User cache

OS cache dir, catalog.json

Read first; refreshed when older than the TTL.

2. Bundled snapshot

catalog.snapshot.json inside the package

Ships fresh at publish time; seeds the user cache with zero network.

3. Live API

uxhints.com

Source of truth for refreshes; if it fails, stale caches are served with a notice in the output.

Not fresh? Call refresh_hint_catalog, or wait for the TTL to expire. A postinstall hook warms the user cache automatically when the bundled snapshot has expired since publish.

Env var

Default

Effect

UXHINTS_CACHE_TTL_HOURS

24

Hours a cached catalog counts as fresh (float; invalid values → 24).

UXHINTS_CACHE_DIR

OS cache dir¹

Override where catalog.json lives.

UXHINTS_NO_CACHE

unset

Set to 1 to bypass all caching and call the live API on every tool call.

¹ ~/.cache/mcp-uxhints on Linux (honors XDG_CACHE_HOME), ~/Library/Caches/mcp-uxhints on macOS, %LOCALAPPDATA%\mcp-uxhints\Cache on Windows.

Details

Topic

Notes

Data source

Public WordPress REST API of uxhints.com (/wp-json/wp/v2)

Content format

WordPress HTML → Markdown at sync time (block comments stripped, entities decoded)

Caching

3 layers: user cache → bundled snapshot → live API (see above)

Resilience

15 s request timeout; live failures fall back to stale caches; all failures surface as MCP tool errors, never crash the server

Scripts

npm run build (tsc), npm run sync:snapshot (regenerate the bundled snapshot), npm start (run the built server)

Credit

All content © uxhints.com by Paul Capcan. This server only wraps the site's public API; it does not host or modify the content.

Available Tools

6 tools
get_hintGet a hintA

Get one uxhints.com hint by id or slug (exactly one is required), with the full content already converted from WordPress HTML to clean Markdown. Results are served from a local catalog cache (default 24h TTL); call refresh_hint_catalog to force an update.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric post id of the hint (shown by list_hints / search_hints).
slugNoPost slug of the hint, without category prefix.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that content is converted from WordPress HTML to clean Markdown, that results are cached with a 24h TTL, and that refresh_hint_catalog exists to bypass the cache. It does not mention error handling or retries, but for a read-oriented fetch tool, the disclosed cache and transformation behaviors are sufficiently transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first conveys the core purpose and output format; the second addresses the cache and the refresh alternative. No wasted words, and the most important detail (the exactly-one constraint) is front-loaded. The structure makes it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description gives a reasonable sense of the return: it includes full content converted to Markdown. It also covers the retrieval method (id/slug) and caching behavior. It does not explicitly enumerate all returned fields (e.g., title, metadata), but for a single-hint fetch the description is largely sufficient. Sibling tools like list_hints might convey the expected object shape implicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already comprehensively describes both parameters (id and slug) with 100% coverage. The description adds critical value by noting that exactly one of the two is required, which is not reflected in the schema (no required fields). It also clarifies that the slug is without category prefix, refining the schema's generic 'Post slug' definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a single hint by id or slug, explicitly noting exactly one is required. It distinguishes itself from siblings like list_hints and search_hints by focusing on a one-shot fetch, and from refresh_hint_catalog by mentioning cache behavior. The verb 'get' plus the resource 'hint' is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the exactly-once constraint for id/slug, which guides parameter selection. It also mentions the cache TTL and points to refresh_hint_catalog as the alternative for force updates. However, it does not explicitly state when to prefer this over search_hints or list_hints, though the name and 'exactly one' implication make the context fairly clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_categoriesList categoriesA

List the hint categories on uxhints.com with hint counts and the slugs to filter list_hints with. Results are served from a local catalog cache (default 24h TTL); call refresh_hint_catalog to force an update.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It does well by revealing the nontrivial caching behavior — results come from a local catalog cache with a 24h TTL — and directing to refresh_hint_catalog for forced updates. It omits return-format details, but for a simple listing tool this is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core purpose (what it lists and its role for list_hints) is front-loaded in the first sentence, with the caching behavior added in the second. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a param-less tool with neither annotations nor an output schema, the description covers the essential ground: what it returns, why it exists (feed list_hints), and how the cache behaves. It could name the exact shape of the result, but the output content is already disclosed, making this adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, which sets the baseline at 4. The description still adds value by previewing what the output will contain (categories with hint counts and slugs), so an agent knows what to expect from the call despite the schema being empty.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-resource pair ('List the hint categories on uxhints.com') and explicitly names the output fields (hint counts, slugs). It also differentiates itself from siblings by describing its role as the provider of filters for list_hints, distinguishing it from list_hints, search_hints, get_hint, and random_hint without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose clearly implies the use case: fetch category slugs to pass into list_hints as filters. It also flags refresh_hint_catalog as the alternative for cache refresh, giving the agent a concrete routing point. It doesn't state explicit exclusions, but the context is strong enough that an agent can decide when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_hintsList hintsA

List UX hints from uxhints.com (id, title, slug, link, date, categories), optionally filtered by a category slug from list_categories. Includes total/totalPages for pagination. Results are served from a local catalog cache (default 24h TTL); call refresh_hint_catalog to force an update.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-based.
categoryNoCategory slug, e.g. "ux-laws". Omit to list all hints.
per_pageNoResults per page (max 100).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and delivers: it discloses the caching behavior with a specific 24h TTL and names the refresh sibling, plus reveals pagination meta (total/totalPages). For a read-only list operation there is no destructive behavior to disclose; the cache staleness caveat is the key trait and it is covered well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero wasted words: the verb and resource are front-loaded, the return structure and filter follow immediately, and the cache caveat is appended last. Each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

In the absence of an output schema, the description compensates by specifying the returned fields and pagination metadata. It also covers cache staleness and where category values come from. Minor gaps remain — error conditions, empty-result behavior, and how totalPages terminates paging — but for a moderate-complexity listing tool this is near-complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — page, category, and per_page are all already described in the schema with defaults and bounds. The description adds marginal value by tying the category parameter to list_categories as the source of valid slugs, but beyond that it does not clarify syntax or formats beyond the schema, so the baseline 3 holds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('List UX hints from uxhints.com') and explicitly enumerates the return fields (id, title, slug, link, date, categories), which sharply differentiates it from the sibling get_hint, search_hints, and random_hint tools. The filtering by category slug further distinguishes it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for the category filter by pointing to list_categories as the source of valid slugs, and explicitly routes cache-freshness concerns to refresh_hint_catalog. However, it stops short of stating when to prefer search_hints or get_hint over this listing tool, leaving some selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

random_hintGet a random hintA

Get one random hint from uxhints.com, same shape as get_hint: full content as Markdown. Results are served from a local catalog cache (default 24h TTL); call refresh_hint_catalog to force an update.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It transparently discloses the caching behavior with 'local catalog cache (default 24h TTL)' and the refresh path, and it states the return format as Markdown. This is substantial beyond the schema, though it does not discuss randomness semantics or edge cases like cache misses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences contain the core purpose, output shape, caching behavior, and refresh path. Information is front-loaded, and no words are wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool with no output schema, the description covers the primary return shape (Markdown, same as get_hint) and operational behavior (cache TTL and refresh). It is adequate, though it relies on get_hint's definition for the full return structure and does not specify what happens if the catalog cache is empty.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the input schema is complete and the baseline is 4. The description still adds value by clarifying the output format and cache behavior, but there are no parameters to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and resource: 'Get one random hint from uxhints.com' and specifies the output shape as 'same shape as get_hint: full content as Markdown.' It clearly differentiates the random selection from the more targeted get_hint, though it relies on a sibling tool for shape details rather than fully describing the resource itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this tool when a random hint is desired. The description gives specific guidance about cache freshness ('call refresh_hint_catalog to force an update'), but it does not explicitly say when to prefer random_hint over list_hints, search_hints, or get_hint, nor does it state exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_hint_catalogRefresh hint catalogA

Force a live sync of the uxhints.com catalog and rewrite the local cache, bypassing the TTL. Returns the new hint/category counts and fetch timestamp. On failure the existing caches stay untouched.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well. It discloses the forced sync, cache rewrite, TTL bypass, expected return values, and failure behavior where existing caches remain untouched. This is unusually complete for a tool with no structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: the action and effect are front-loaded, the return values are stated, and the failure guarantee is included. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description covers what it does, what it returns, and what happens on failure. An agent has enough information to invoke it correctly and set expectations, especially given the sibling-tool context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema description coverage is 100%, so there is nothing for the description to add about parameters. The description instead adds useful behavioral and return-value context, which is appropriate given the empty input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Force a live sync'), the resource ('uxhints.com catalog'), and the key side effect ('rewrite the local cache'). This clearly distinguishes it from sibling read tools like list_hints or search_hints, which consume the catalog rather than refresh it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: call this when a live sync is needed and the TTL should be bypassed. It does not explicitly name alternatives or say when not to use it, but the contrast with the read-oriented siblings is strongly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_hintsSearch hintsA

Local search over the cached uxhints.com catalog: case-insensitive and diacritic-insensitive substring matching over hint titles, excerpts, and full Markdown content. Title matches rank before content matches. Same result shape and pagination as list_hints. Results are served from a local catalog cache (default 24h TTL); call refresh_hint_catalog to force an update.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-based.
queryYesSearch term(s).
per_pageNoResults per page (max 100).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently states cache behavior (local, 24h TTL), the substring matching semantics (case/diacritic insensitive), ranking (title over content), and that pagination/results match list_hints. It does not mention error conditions, rate limits, or potential staleness beyond TTL, but for a read-only search tool these omissions are minor given the depth of behavior described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no fluff. The main purpose is front-loaded, followed by matching specifics, ranking, result shape, and cache refresh guidance. Every clause earns its place; there is no redundancy or verbose phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with no output schema, the description covers the core contract: scope, matching behavior, ranking, result shape, cache TTL, and how to force an update. It omits error handling, network behavior, or any edge-case notes, but the reference to list_hints for result shape and pagination covers the return structure adequately. It is nearly complete, though a note on what happens when the cache is unavailable would push it to a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all three parameters (query, page, per_page) described, so baseline is 3. The description adds meaningful semantic context beyond the schema: it specifies that query performs substring matching over titles, excerpts, and full content, is case/diacritic insensitive, and that title matches rank first. It also ties pagination to list_hints, giving agents a clear contract for page and per_page behavior. This enrichment justifies one point above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (search) with a precise resource (cached uxhints.com catalog) and detailed behaviors: case-insensitive, diacritic-insensitive substring matching over titles, excerpts, and full content. It also distinguishes itself from list_hints by referencing the same result shape and pagination, and from refresh_hint_catalog by mentioning the cache update mechanism. This clarity leaves no ambiguity about the tool's role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for searching rather than listing, but it does not explicitly state when to prefer search_hints over list_hints, get_hint, or random_hint. It does include a specific usage note for refreshing the catalog (call refresh_hint_catalog), but lacks a broader when-to-use/when-not-to-use guidance. Alternative selection is largely left to inference from the name and the reference to list_hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv1.1.1
    • First observedget_hint
    • First observedlist_categories
    • First observedlist_hints
    • First observedrandom_hint
    • First observedrefresh_hint_catalog
    • First observedsearch_hints

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a distinct purpose: listing categories, listing hints with filters, searching, fetching a specific hint, retrieving a random hint, and refreshing the cache. There is no overlap in functionality; an agent can easily choose the correct tool based on intent.

Naming Consistency4/5

Tool names mostly follow a clear verb_noun pattern (list_, search_, get_, refresh_). 'random_hint' is a slight deviation since 'random' is not a verb, but it still reads as an imperative action and fits the overall snake_case convention. The inconsistency is minor.

Tool Count5/5

With 6 tools, the server is well-scoped for a catalog browsing and retrieval service. Each tool serves a unique, essential function without redundancy or bloat. The count is ideal for the domain.

Completeness5/5

The tool set covers all common read operations: list all (with category filters), search, get by id/slug, and get random. The refresh tool handles cache maintenance. Since this is a read-only hint catalog, there are no missing CRUD operations; the surface is complete for its purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Search and explore a catalog of 2,000+ MCP servers — full-text search, trending, hot, categories, and side-by-side comparison — from any MCP client. A zero-dependency stdio bridge over the hosted awesome-mcp.tools endpoint.
    8
    20
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP gateway and offline catalog CLI that aggregates multiple upstream MCP servers into a single stdio endpoint, and provides tool recommendation and catalog inspection without connecting to upstreams.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A remote MCP server exposing uxspot.io's curated UX glossary, AI tools directory, checklists, and Learn UX curriculum as callable tools. Enables AI assistants to search for UX terms, tools, and checklists via natural language.
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mateodioev/mcp-uxhints'

If you have feedback or need assistance with the MCP directory API, please join our Discord server