miromiro-mcp 0.6.0 → 0.6.1

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.mjs +9 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "miromiro-mcp",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "MCP server for the MiroMiro design-extraction API — give your coding agent the real code, design tokens, assets, SVGs, fonts, and Lottie of any website.",
5
5
  "mcpName": "app.miromiro/miromiro",
6
6
  "type": "module",
package/src/index.mjs CHANGED
@@ -39,7 +39,7 @@ const TOOL_ANNOTATIONS = {
39
39
  // client-rendered React/Next/SPA sites that return little statically.
40
40
  const RENDER_ARG = {
41
41
  type: 'boolean',
42
- description: 'Run the page in a real browser first so its JavaScript executes - use for client-rendered (React/Next/SPA) sites, or when a normal call came back thin. Slower, and adds 5 credits to the call.'
42
+ description: 'Run the page in a real browser first so its JavaScript executes - use for client-rendered (React/Next/SPA) sites, when a normal call came back thin, or after a 403 target_blocked (bot protection refuses plain HTTP requests but usually lets a browser through). Slower, and adds 5 credits to the call.'
43
43
  }
44
44
 
45
45
  // Shared input arg: skip the 24h cache for this one call (charged normally).
@@ -296,7 +296,7 @@ const TOOLS = [
296
296
  title: 'Extract fonts',
297
297
  endpoint: 'fonts',
298
298
  description:
299
- "Detect the real typography a site loads by resolving its full CSS cascade: every @font-face file with family/weight/style/format, Google Fonts links, preloads, plus a grouped per-family summary (families). Pass fields='families' for just the summary. Use to match typography.",
299
+ "Detect the real typography a site loads by resolving its full CSS cascade: every @font-face file with family/weight/style/format, Google Fonts links, preloads, plus a grouped per-family summary (families). Pass fields='families' for just the summary. Use to match typography. On a type-foundry site the families served are usually demo cuts of the products (subset character set, kerning and OpenType features stripped) - those are flagged demo:true with a note, and you should pass that on rather than presenting them as the real font.",
300
300
  inputSchema: {
301
301
  type: 'object',
302
302
  properties: {
@@ -335,12 +335,14 @@ const TOOLS = [
335
335
  source: { type: 'string' },
336
336
  weights: { type: 'array', items: { type: 'string' } },
337
337
  styles: { type: 'array', items: { type: 'string' } },
338
- files: { type: 'number' }
338
+ files: { type: 'number' },
339
+ demo: { type: 'boolean', description: 'The family name marks it a foundry demo/trial cut, not the real font' }
339
340
  }
340
341
  }
341
342
  },
342
343
  googleFontsLinks: { type: 'array', items: { type: 'string' } },
343
344
  count: { type: 'number' },
345
+ note: { type: 'string', description: 'Only present when demo/trial families were found - tell the user, these files are subset and feature-stripped, not the usable typeface' },
344
346
  usage: OUT_USAGE,
345
347
  truncation_note: OUT_TRUNCATION
346
348
  },
@@ -497,7 +499,9 @@ const INSTRUCTIONS =
497
499
  'say which one you returned. The API reads static HTML+CSS by default; pass render=true on any tool to ' +
498
500
  'execute the page JavaScript in a real browser first (client-rendered sites, +5 credits). When a static ' +
499
501
  'call comes back thin because the page is client-rendered, the response includes a hint field saying to ' +
500
- 'retry with render=true - follow it. Explain your results, do not just dump them: extract_brand returns a ' +
502
+ 'retry with render=true - follow it. Likewise a 403 target_blocked is rarely a dead end: it is usually the ' +
503
+ "site's bot protection turning away a plain HTTP request, so retry the SAME url with render=true before " +
504
+ 'telling the user the site cannot be extracted. Explain your results, do not just dump them: extract_brand returns a ' +
501
505
  'signals object saying where the colors came from (signals.explanation is a sentence written to be repeated ' +
502
506
  'to the user) - when signals.primarySource is "usage" the site declared nothing and the colors are an ' +
503
507
  'inferred guess, so say that instead of presenting them as the official palette. Rendered calls can also ' +
@@ -506,7 +510,7 @@ const INSTRUCTIONS =
506
510
  'bypass the 24h cache when a site just changed.'
507
511
 
508
512
  const server = new Server(
509
- { name: 'miromiro', version: '0.6.0' },
513
+ { name: 'miromiro', version: '0.6.1' },
510
514
  { capabilities: { tools: {} }, instructions: INSTRUCTIONS }
511
515
  )
512
516