@supericons/mcp 0.4.9 → 0.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.11 - 2026-06-28
4
+
5
+ ### Fixed
6
+
7
+ - improved `recommend_icons` for Supericons (`si`) brand and logo slots so exact AI tool logos such as OpenAI Codex, Lovable, Kickbacks.ai, and xAI rank correctly
8
+
9
+ ## 0.4.10 - 2026-06-27
10
+
11
+ ### Added
12
+
13
+ - added Supericons (`si`) library discovery for hosted and stdio MCP clients
14
+ - added hosted search support for Supericons AI and developer tool logo queries
15
+
16
+ ### Changed
17
+
18
+ - updated packaged product facts to reflect 21,367 free icons across 11 libraries
19
+ - sends the public Supabase key header when calling the public MCP search gateway
20
+
3
21
  ## 0.4.5 - 2026-05-14
4
22
 
5
23
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generated_at": "2026-05-22T20:23:11.858Z",
3
+ "generated_at": "2026-06-28T08:12:34.465Z",
4
4
  "presets": [
5
5
  {
6
6
  "preset": "bounce",
@@ -143,6 +143,16 @@ async function retryLocalizedHostedSearch({ postSearch, url, headers, body, loca
143
143
  return null;
144
144
  }
145
145
 
146
+ function getPublicGatewayAnonKey() {
147
+ return (
148
+ process.env.SUPERICONS_MCP_SEARCH_ANON_KEY
149
+ || process.env.SUPERICONS_SEARCH_ENGINE_ANON_KEY
150
+ || process.env.SUPABASE_ANON_KEY
151
+ || process.env.SUPERICONS_SUPABASE_ANON
152
+ || SUPABASE_ANON
153
+ );
154
+ }
155
+
146
156
  export async function searchIconsHostedMcp({
147
157
  query,
148
158
  library = null,
@@ -194,14 +204,19 @@ export async function searchIconsHostedMcp({
194
204
  }) || payload;
195
205
  }
196
206
 
197
- const headers = {
198
- 'Content-Type': 'application/json',
199
- };
200
-
201
- if (apiKey) {
202
- headers['x-supericons-api-key'] = apiKey;
203
- }
204
-
207
+ const publicAnonKey = getPublicGatewayAnonKey();
208
+ const headers = {
209
+ 'Content-Type': 'application/json',
210
+ apikey: publicAnonKey,
211
+ };
212
+
213
+ if (apiKey) {
214
+ headers['x-supericons-api-key'] = apiKey;
215
+ }
216
+ if (looksLikeJwt(publicAnonKey)) {
217
+ headers.Authorization = `Bearer ${publicAnonKey}`;
218
+ }
219
+
205
220
  const url = getPublicGatewayUrl();
206
221
  const body = {
207
222
  query,
package/index.js CHANGED
@@ -699,18 +699,19 @@ async function searchAccessibleIcons({ query, library, limit, style = VARIANT_ST
699
699
  // ============================================================
700
700
  // Library Metadata
701
701
  // ============================================================
702
- const libraryMeta = {
703
- material: { name: 'Material Symbols', description: 'Google Material Symbols with 4-axis variable font support', hasStroke: false, hasFilled: true, count: 4205, outlineCount: 4205, solidCount: 4205 },
704
- lucide: { name: 'Lucide', description: 'Beautiful, consistent open-source icons', hasStroke: true, hasFilled: false, count: 1951, outlineCount: 1951, solidCount: 0 },
705
- tabler: { name: 'Tabler', description: 'Over 5,000 free MIT-licensed SVG icons', hasStroke: true, hasFilled: true, count: 5021, outlineCount: 5021, solidCount: 1053 },
702
+ const libraryMeta = {
703
+ material: { name: 'Material Symbols', description: 'Google Material Symbols with 4-axis variable font support', hasStroke: false, hasFilled: true, count: 4205, outlineCount: 4205, solidCount: 4205 },
704
+ lucide: { name: 'Lucide', description: 'Beautiful, consistent open-source icons', hasStroke: true, hasFilled: false, count: 1951, outlineCount: 1951, solidCount: 0 },
705
+ tabler: { name: 'Tabler', description: 'Over 5,000 free MIT-licensed SVG icons', hasStroke: true, hasFilled: true, count: 5021, outlineCount: 5021, solidCount: 1053 },
706
706
  phosphor: { name: 'Phosphor', description: 'Flexible icon family for interfaces and beyond', hasStroke: false, hasFilled: true, count: 1512, outlineCount: 1512, solidCount: 1512 },
707
707
  heroicons: { name: 'Heroicons', description: 'Beautiful hand-crafted SVG icons by Tailwind CSS', hasStroke: true, hasFilled: true, count: 324, outlineCount: 324, solidCount: 324 },
708
708
  bootstrap: { name: 'Bootstrap', description: 'Official open-source SVG icon library for Bootstrap', hasStroke: false, hasFilled: true, count: 1373, outlineCount: 1373, solidCount: 705 },
709
709
  iconoir: { name: 'Iconoir', description: 'High-quality open-source icon library', hasStroke: true, hasFilled: true, count: 1383, outlineCount: 1383, solidCount: 288 },
710
- ionicons: { name: 'Ionicons', description: 'Premium open-source icons for Ionic Framework', hasStroke: true, hasFilled: true, count: 421, outlineCount: 421, solidCount: 515 },
711
- simpleicons: { name: 'Simple Icons', description: '3,400+ SVG icons for popular brands', hasStroke: false, hasFilled: false, count: 3412, outlineCount: 3412, solidCount: 0 },
712
- mingcute: { name: 'MingCute', description: 'Modern open-source icon set with broad interface coverage', hasStroke: false, hasFilled: true, count: 1662, outlineCount: 1662, solidCount: 1662 },
713
- };
710
+ ionicons: { name: 'Ionicons', description: 'Premium open-source icons for Ionic Framework', hasStroke: true, hasFilled: true, count: 421, outlineCount: 421, solidCount: 515 },
711
+ simpleicons: { name: 'Simple Icons', description: '3,400+ SVG icons for popular brands', hasStroke: false, hasFilled: false, count: 3412, outlineCount: 3412, solidCount: 0 },
712
+ mingcute: { name: 'MingCute', description: 'Modern open-source icon set with broad interface coverage', hasStroke: false, hasFilled: true, count: 1662, outlineCount: 1662, solidCount: 1662 },
713
+ si: { name: 'Supericons', description: 'First-party AI and developer tool logos curated for agentic app builders', hasStroke: false, hasFilled: false, count: 50, outlineCount: 50, solidCount: 0 },
714
+ };
714
715
 
715
716
  // Add premium pack libraries
716
717
  const packDirNames = existsSync(packsDir)
@@ -759,10 +760,10 @@ const server = new McpServer({
759
760
  // --- Tool: search_icons ---
760
761
  server.tool(
761
762
  'search_icons',
762
- `Search ${freeIconCountLabel} using AI-powered synonym expansion. Returns matching free icons with SVG code and SI semantic guidance when available. Pro API keys unlock workflow tools; premium pack icon search is not exposed through MCP yet.`,
763
+ `Search ${freeIconCountLabel} using AI-powered synonym expansion. Returns matching free icons with SVG code and SI semantic guidance when available, including Supericons AI and developer tool logos. Pro API keys unlock workflow tools; premium pack icon search is not exposed through MCP yet.`,
763
764
  {
764
765
  query: z.string().describe('Search term (e.g. "heart", "login", "download arrow")'),
765
- library: z.string().optional().describe('Filter by free library: lucide, tabler, phosphor, heroicons, bootstrap, iconoir, ionicons, material, simpleicons, or mingcute'),
766
+ library: z.string().optional().describe('Filter by free library: si, lucide, tabler, phosphor, heroicons, bootstrap, iconoir, ionicons, material, simpleicons, or mingcute'),
766
767
  style: z.enum(['any', 'outline', 'solid']).optional().default('any').describe('Optional style preference. Use `solid` only for libraries that ship fill or solid variants.'),
767
768
  locale: z.enum(['zh-Hans', 'zh-Hant', 'ja', 'ko', 'es', 'de', 'pt', 'ar', 'hi', 'vi', 'th']).optional().describe('Optional locale for multilingual search terms. Supported values: zh-Hans, zh-Hant, ja, ko, es, de, pt, ar, hi, vi, th.'),
768
769
  limit: z.number().min(1).max(50).optional().default(10).describe('Max results (1-50, default 10)'),
@@ -834,12 +835,12 @@ server.tool(
834
835
  );
835
836
 
836
837
  // --- Tool: recommend_icons ---
837
- server.tool(
838
- 'recommend_icons',
839
- 'Recommend the most suitable icons for one or more UI slots. Returns shortlist choices with preview-ready SVGs, short reasons, and SI semantic guidance when available.',
840
- {
841
- task: z.string().describe('Overall UI task, for example "replace the 4 bottom navigation icons" or "choose icons for a settings panel".'),
842
- library: z.string().optional().describe('Optional library filter such as mingcute, lucide, tabler, material, or simpleicons.'),
838
+ server.tool(
839
+ 'recommend_icons',
840
+ 'Recommend the most suitable icons for one or more UI slots. Returns shortlist choices with preview-ready SVGs, short reasons, and SI semantic guidance when available.',
841
+ {
842
+ task: z.string().describe('Overall UI task, for example "replace the 4 bottom navigation icons" or "choose icons for a settings panel".'),
843
+ library: z.string().optional().describe('Optional library filter such as si, mingcute, lucide, tabler, material, or simpleicons.'),
843
844
  style: z.enum(['any', 'outline', 'solid']).optional().default('any').describe('Optional style preference. Use `solid` to prefer filled variants where they exist.'),
844
845
  locale: z.enum(['zh-Hans', 'zh-Hant', 'ja', 'ko', 'es', 'de', 'pt', 'ar', 'hi', 'vi', 'th']).optional().describe('Optional locale for multilingual slot labels. Supported values: zh-Hans, zh-Hant, ja, ko, es, de, pt, ar, hi, vi, th.'),
845
846
  slots: z.array(z.string().min(1)).min(1).max(12).describe('List of UI slots to fill, for example ["Home tab", "Create action", "Alerts tab", "Profile tab"].'),
@@ -882,7 +883,7 @@ server.tool(
882
883
  'Retrieve a specific free icon by its ID and library. Returns the full SVG code, metadata, and SI semantic guidance when available. Premium pack icon retrieval is not exposed through MCP yet.',
883
884
  {
884
885
  id: z.string().describe('Icon ID (e.g. "heart", "arrow-right", "settings")'),
885
- library: z.string().describe('Free library name (e.g. "lucide", "tabler", "phosphor", "iconoir", or "mingcute")'),
886
+ library: z.string().describe('Free library name (e.g. "si", "lucide", "tabler", "phosphor", "iconoir", or "mingcute")'),
886
887
  style: z.enum(['any', 'outline', 'solid']).optional().default('any').describe('Optional style preference. Use `solid` to request a filled variant when the library supports it.'),
887
888
  },
888
889
  async ({ id, library, style }) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supericons/mcp",
3
- "version": "0.4.9",
3
+ "version": "0.4.11",
4
4
  "mcpName": "io.github.curlymolelabs/supericons",
5
5
  "description": "MCP server for Supericons: multilingual semantic SVG icon search and recommendations for AI coding agents.",
6
6
  "type": "module",
@@ -36,8 +36,9 @@
36
36
  "runtime/converter-workflow.js",
37
37
  "runtime/cjk-search-core.js",
38
38
  "runtime/generated-search-intent-rules.js",
39
- "runtime/icon-semantic-aliases.js",
40
- "runtime/icon-taxonomy-seed.js",
39
+ "runtime/icon-semantic-aliases.js",
40
+ "runtime/supericons-ai-taxonomy.js",
41
+ "runtime/icon-taxonomy-seed.js",
41
42
  "runtime/public-metadata-sanitizer.js",
42
43
  "runtime/search-intent-core.js",
43
44
  "search.js",
@@ -1,19 +1,19 @@
1
1
  {
2
- "generatedAt": "2026-05-15T19:37:45.780Z",
3
- "freeIconCount": 21264,
4
- "freeLibraryCount": 10,
2
+ "generatedAt": "2026-06-28T06:24:29.474Z",
3
+ "freeIconCount": 21371,
4
+ "freeLibraryCount": 11,
5
5
  "premiumCollectionCount": 8,
6
6
  "premiumIconCount": 400,
7
7
  "mcpToolCount": 13,
8
8
  "mcpFreeToolCount": 3,
9
- "mcpPackageVersion": "0.4.7",
9
+ "mcpPackageVersion": "0.4.10",
10
10
  "display": {
11
11
  "freeIconsRounded": "20,000+",
12
12
  "freeIconsLabel": "20,000+ curated SVG icons",
13
- "freeIconsAcrossLibrariesLabel": "20,000+ icons across 10 libraries",
14
- "freeIconsAcrossLibrariesFreeLabel": "20,000+ curated SVG icons across 10 libraries",
15
- "freeSvgIconsAcrossLibrariesLabel": "20,000+ free SVG icons from 10 libraries",
16
- "openSourceSvgIconsAcrossLibrariesLabel": "20,000+ open-source SVG icons from 10 libraries",
13
+ "freeIconsAcrossLibrariesLabel": "20,000+ icons across 11 libraries",
14
+ "freeIconsAcrossLibrariesFreeLabel": "20,000+ curated SVG icons across 11 libraries",
15
+ "freeSvgIconsAcrossLibrariesLabel": "20,000+ free SVG icons from 11 libraries",
16
+ "openSourceSvgIconsAcrossLibrariesLabel": "20,000+ open-source SVG icons from 11 libraries",
17
17
  "freeIconLibraryLabel": "20,000+ icon library",
18
18
  "freeResultsLabel": "20,000+ results",
19
19
  "searchPlaceholderLabel": "Search 20,000+ icons...",