Show each MCP server's logo, from sources the publisher declared - #72
Merged
Merged
Conversation
Listings drew a two-letter monogram. Most can show a real logo from something the publisher already put on the public record: - The icon declared in server.json, preferring SVG, then the smallest raster still sharp at double density; http and data: are dropped - The GitHub avatar of an io.github.* owner -- verified by the official registry, and two listings in three have one - The repository owner's avatar for domain namespaces, ranked last since the repo URL is the publisher's own claim The image sits over the monogram and removes itself if it fails to load, so a dead icon never shows a broken-image glyph. Nothing is guessed from a name: a wrong logo implies an affiliation that is not there. sync(reapply: true) pushes unchanged upstream entries through the mapping again so existing listings get icons. It announces nothing, so 37,000 rows do not reach IndexNow. Closes #71 --- Pages affected: - [MCP Harbor](https://ai.mcpharbor.dev/) -- registry home and newest servers. - [MCP server search](https://ai.mcpharbor.dev/servers) -- every card in the grid now carries a logo. - [HIBP MCP server](https://ai.mcpharbor.dev/servers/io.github.troyhunt/hibp) -- logo from a verified GitHub owner. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #71.
Every listing drew a two-letter monogram. Most can now show a real logo, taken only from things the publisher already put on the public record.
Where logos come from, in order
iconsinserver.jsonio.github.*ownerNothing is inferred from a name or scraped from a website. A wrong logo asserts an affiliation that isn't there, which is worse than none.
From a declared
iconsarray: SVG first, then the smallest raster still sharp at 2× (a 512px PNG drawn at 48px is a big download for nothing), and dark-theme icons are passed over when there's another.http://(mixed content),data:and placeholder URLs are dropped in the manifest, so an unusable icon never invalidates the listing's import.Rendering
The
<img>is stacked over the existing monogram and carriesonerror="this.remove()". If a publisher moves their icon or a host dies, the reader sees the monogram, never a broken-image glyph, and the tile's size is fixed up front, so there's no layout shift either way.referrerpolicy="no-referrer"keeps the page a visitor was reading out of third-party logs. Declared icons get padding on a light tile (most are transparent marks drawn for white); avatars are opaque and fill the tile. The tile colour is a new--logo-tiletoken, off-white in dark mode.Backfill
The sync rightly skips upstream entries whose
updatedAthasn't moved, which also means a newly read field likeiconswould never reach existing listings.OfficialRegistry.sync(reapply: true)pushes everything through the mapping once more, writes only rows whose mapped fields actually differ, and announces nothing — otherwise all 37,000 listings would have been pushed to IndexNow, which already answers 429 at normal volume.Tests: 185 passing on three seeds.
Pages affected:
🤖 Generated with Claude Code