@frase/mcp-server 0.3.5 → 0.3.7

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 (36) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/content-types-config-mirror.d.ts +75 -0
  3. package/dist/content-types-config-mirror.d.ts.map +1 -0
  4. package/dist/content-types-config-mirror.js +75 -0
  5. package/dist/content-types-config-mirror.js.map +1 -0
  6. package/dist/content-types.d.ts +16 -0
  7. package/dist/content-types.d.ts.map +1 -0
  8. package/dist/content-types.js +34 -0
  9. package/dist/content-types.js.map +1 -0
  10. package/dist/index.js +1 -1
  11. package/dist/prompts/content-pipeline.d.ts.map +1 -1
  12. package/dist/prompts/content-pipeline.js +5 -2
  13. package/dist/prompts/content-pipeline.js.map +1 -1
  14. package/dist/prompts/create-seo-article.d.ts.map +1 -1
  15. package/dist/prompts/create-seo-article.js +5 -2
  16. package/dist/prompts/create-seo-article.js.map +1 -1
  17. package/dist/tools/ai-visibility.d.ts +14 -0
  18. package/dist/tools/ai-visibility.d.ts.map +1 -1
  19. package/dist/tools/ai-visibility.js +296 -0
  20. package/dist/tools/ai-visibility.js.map +1 -1
  21. package/dist/tools/briefs.d.ts +8 -8
  22. package/dist/tools/briefs.d.ts.map +1 -1
  23. package/dist/tools/briefs.js +11 -15
  24. package/dist/tools/briefs.js.map +1 -1
  25. package/dist/tools/cms-posts.d.ts +2 -0
  26. package/dist/tools/cms-posts.d.ts.map +1 -1
  27. package/dist/tools/cms-posts.js +62 -11
  28. package/dist/tools/cms-posts.js.map +1 -1
  29. package/dist/tools/serp.d.ts.map +1 -1
  30. package/dist/tools/serp.js +17 -13
  31. package/dist/tools/serp.js.map +1 -1
  32. package/dist/tools/templates.d.ts.map +1 -1
  33. package/dist/tools/templates.js +6 -5
  34. package/dist/tools/templates.js.map +1 -1
  35. package/package.json +10 -4
  36. package/server.json +2 -2
package/CHANGELOG.md CHANGED
@@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.3.7] - 2026-06-04
9
+
10
+ ### Fixed
11
+ - `analyze_serp`: People Also Ask entries rendered as `[object Object]` and several fields showed `undefined`. PAA questions and result fields now render correctly.
12
+
13
+ ### Changed
14
+ - Bumped `@frase/core` dependency to `0.1.5`, which adds the `ToolResult.hidden`/`reason` hide-mirror fields and `McpToolDefinition.inputSchema.additionalProperties` that the AI-visibility tools rely on. (The tools had used these since late May, but core was never republished — the build only typechecks at publish time, so it surfaced now.)
15
+ - Updated runtime dependencies (`hono`, `@modelcontextprotocol/sdk`) and upgraded the test toolchain (`vitest` 2.x → 4.x) to clear a critical security advisory.
16
+ - `server.json` `version` (and its nested npm package `version`) corrected from `0.3.5` to track the package version — it had drifted behind `package.json`/`manifest.json` since 0.3.6.
17
+
18
+ ## [0.3.6] - 2026-05-18
19
+
20
+ ### Added
21
+ - `create_brief`, `update_brief`, `list_templates`, `create_template`: `content_type` now accepts the canonical 16-type taxonomy in addition to the legacy 5-bucket values. New types: `blog_post`, `page`, `faq`, `glossary`, `pillar`, `how_to`, `listicle`, `case_study`, `tutorial`, `news`, `product_update`, `data_report`, `event`, `resource` (alongside the existing `comparison` and `landing`). Prefer the specific types — they produce correctly-shaped outlines and type-appropriate word counts via the platform's spec system.
22
+
23
+ ### Changed
24
+ - **`create_brief.target_word_count`** is now optional with no client-side default. When omitted, the server uses the content type's recommended length (e.g. ~1000 for `faq`, ~1500 for `glossary`, ~3500 for `pillar`) instead of a fixed 2000. If your integration assumed 2000, either pass an explicit value or be ready to receive different per-type defaults in the response.
25
+ - **`create_brief.target_word_count`** lower bound widened from 500 to 80 to support short-form types (`resource`, `product_update`, `event`).
26
+ - **`create_brief.content_type`** default changed from `"blog"` to `"blog_post"` (canonical 16-type equivalent).
27
+ - **Response shape**: brief responses now echo the **normalized 16-type** `content_type`, not the input string. A client sending `content_type: "blog"` will receive `content_type: "blog_post"` in the response; `"guide"` → `"how_to"`, `"product"` → `"product_update"`. Update any client code that keys off the returned `content_type` field.
28
+ - Validation error messages for `content_type` now list 16-type values.
29
+
30
+ ### Deprecated
31
+ - Legacy 5-bucket `content_type` values (`blog`, `guide`, `landing`, `product`, `comparison`) are still accepted but normalized to 16-type equivalents at the API boundary. New integrations should use the 16-type values directly.
32
+
33
+ ### Fixed
34
+ - `SERVER_VERSION` constant and `manifest.json` `version` now correctly report the package version (previously stuck at `0.2.2` despite `package.json` being at `0.3.5`). Clients reading the MCP `initialize` response will now see the actual server version.
35
+
8
36
  ## [0.2.0] - 2026-03-08
9
37
 
10
38
  ### Added
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Cross-package mirror of the per-content-type JSON Schemas emitted by
3
+ * `src/lib/content/content-type-configs/*` in the main Next.js app.
4
+ *
5
+ * Cross-package import is blocked: the MCP server publishes as its own
6
+ * npm package and cannot reach into the main app's Next.js source. This
7
+ * constant MUST stay in sync with `src/lib/content/content-type-configs/tool-review.ts`.
8
+ *
9
+ * A parity contract test asserts deep-equality against the live
10
+ * `contentTypeConfigRegistry.tool_review.jsonSchema` produced by zod 4's
11
+ * `z.toJSONSchema()`:
12
+ * src/lib/content/content-type-configs/__tests__/mcp-parity.test.ts
13
+ *
14
+ * If you change the Zod schema in the main app, regenerate this constant
15
+ * by running (from repo root):
16
+ * npx tsx -e "import('./src/lib/content/content-type-configs/tool-review').then(m => console.log(JSON.stringify((m.default ?? m).toolReviewConfigModule.jsonSchema, null, 2)))"
17
+ * and paste the output below verbatim. The contract test will fail until
18
+ * the mirror is updated.
19
+ */
20
+ export declare const TOOL_REVIEW_JSON_SCHEMA: {
21
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
22
+ readonly type: "object";
23
+ readonly properties: {
24
+ readonly rating: {
25
+ readonly type: "number";
26
+ readonly minimum: 0;
27
+ readonly maximum: 5;
28
+ };
29
+ readonly prosList: {
30
+ readonly default: readonly [];
31
+ readonly type: "array";
32
+ readonly items: {
33
+ readonly type: "string";
34
+ readonly minLength: 1;
35
+ };
36
+ };
37
+ readonly consList: {
38
+ readonly default: readonly [];
39
+ readonly type: "array";
40
+ readonly items: {
41
+ readonly type: "string";
42
+ readonly minLength: 1;
43
+ };
44
+ };
45
+ readonly pricingNote: {
46
+ readonly type: "string";
47
+ readonly minLength: 1;
48
+ };
49
+ readonly verdictSummary: {
50
+ readonly type: "string";
51
+ readonly minLength: 1;
52
+ };
53
+ readonly toolCategory: {
54
+ readonly type: "string";
55
+ readonly minLength: 1;
56
+ };
57
+ readonly toolOS: {
58
+ readonly type: "string";
59
+ readonly minLength: 1;
60
+ };
61
+ readonly aggregateRatingValue: {
62
+ readonly type: "number";
63
+ readonly minimum: 0;
64
+ readonly maximum: 5;
65
+ };
66
+ readonly aggregateRatingCount: {
67
+ readonly type: "integer";
68
+ readonly minimum: 0;
69
+ readonly maximum: 9007199254740991;
70
+ };
71
+ };
72
+ readonly required: readonly ["rating", "prosList", "consList"];
73
+ readonly additionalProperties: false;
74
+ };
75
+ //# sourceMappingURL=content-types-config-mirror.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-types-config-mirror.d.ts","sourceRoot":"","sources":["../src/content-types-config-mirror.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsD1B,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Cross-package mirror of the per-content-type JSON Schemas emitted by
3
+ * `src/lib/content/content-type-configs/*` in the main Next.js app.
4
+ *
5
+ * Cross-package import is blocked: the MCP server publishes as its own
6
+ * npm package and cannot reach into the main app's Next.js source. This
7
+ * constant MUST stay in sync with `src/lib/content/content-type-configs/tool-review.ts`.
8
+ *
9
+ * A parity contract test asserts deep-equality against the live
10
+ * `contentTypeConfigRegistry.tool_review.jsonSchema` produced by zod 4's
11
+ * `z.toJSONSchema()`:
12
+ * src/lib/content/content-type-configs/__tests__/mcp-parity.test.ts
13
+ *
14
+ * If you change the Zod schema in the main app, regenerate this constant
15
+ * by running (from repo root):
16
+ * npx tsx -e "import('./src/lib/content/content-type-configs/tool-review').then(m => console.log(JSON.stringify((m.default ?? m).toolReviewConfigModule.jsonSchema, null, 2)))"
17
+ * and paste the output below verbatim. The contract test will fail until
18
+ * the mirror is updated.
19
+ */
20
+ export const TOOL_REVIEW_JSON_SCHEMA = {
21
+ $schema: "https://json-schema.org/draft/2020-12/schema",
22
+ type: "object",
23
+ properties: {
24
+ rating: {
25
+ type: "number",
26
+ minimum: 0,
27
+ maximum: 5,
28
+ },
29
+ prosList: {
30
+ default: [],
31
+ type: "array",
32
+ items: {
33
+ type: "string",
34
+ minLength: 1,
35
+ },
36
+ },
37
+ consList: {
38
+ default: [],
39
+ type: "array",
40
+ items: {
41
+ type: "string",
42
+ minLength: 1,
43
+ },
44
+ },
45
+ pricingNote: {
46
+ type: "string",
47
+ minLength: 1,
48
+ },
49
+ verdictSummary: {
50
+ type: "string",
51
+ minLength: 1,
52
+ },
53
+ toolCategory: {
54
+ type: "string",
55
+ minLength: 1,
56
+ },
57
+ toolOS: {
58
+ type: "string",
59
+ minLength: 1,
60
+ },
61
+ aggregateRatingValue: {
62
+ type: "number",
63
+ minimum: 0,
64
+ maximum: 5,
65
+ },
66
+ aggregateRatingCount: {
67
+ type: "integer",
68
+ minimum: 0,
69
+ maximum: 9007199254740991,
70
+ },
71
+ },
72
+ required: ["rating", "prosList", "consList"],
73
+ additionalProperties: false,
74
+ };
75
+ //# sourceMappingURL=content-types-config-mirror.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-types-config-mirror.js","sourceRoot":"","sources":["../src/content-types-config-mirror.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,OAAO,EAAE,8CAA8C;IACvD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;SACX;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,CAAC;aACb;SACF;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,CAAC;aACb;SACF;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,CAAC;SACb;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,CAAC;SACb;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,CAAC;SACb;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,CAAC;SACb;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;SACX;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,gBAAgB;SAC1B;KACF;IACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;IAC5C,oBAAoB,EAAE,KAAK;CACnB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The 18-type content taxonomy used by the Frase platform.
3
+ *
4
+ * This is the canonical list of values the `/api/v1/briefs` endpoint
5
+ * accepts in `content_type`. The API also accepts legacy 5-bucket
6
+ * values (`blog`, `guide`, `landing`, `product`, `comparison`) for
7
+ * back-compat and normalizes them at the boundary, but new MCP
8
+ * integrations should use these 18 values directly.
9
+ *
10
+ * Keep this list in lockstep with `src/lib/core/content-types.ts`
11
+ * in the main app. We can't import from there because the MCP server
12
+ * publishes as its own npm package and can't reach into Next.js source.
13
+ */
14
+ export declare const CONTENT_TYPES: readonly ["blog_post", "page", "faq", "glossary", "comparison", "pillar", "how_to", "landing", "listicle", "case_study", "tutorial", "news", "product_update", "data_report", "event", "resource", "alternative", "tool_review"];
15
+ export type ContentType = (typeof CONTENT_TYPES)[number];
16
+ //# sourceMappingURL=content-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../src/content-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,kOAmBhB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The 18-type content taxonomy used by the Frase platform.
3
+ *
4
+ * This is the canonical list of values the `/api/v1/briefs` endpoint
5
+ * accepts in `content_type`. The API also accepts legacy 5-bucket
6
+ * values (`blog`, `guide`, `landing`, `product`, `comparison`) for
7
+ * back-compat and normalizes them at the boundary, but new MCP
8
+ * integrations should use these 18 values directly.
9
+ *
10
+ * Keep this list in lockstep with `src/lib/core/content-types.ts`
11
+ * in the main app. We can't import from there because the MCP server
12
+ * publishes as its own npm package and can't reach into Next.js source.
13
+ */
14
+ export const CONTENT_TYPES = [
15
+ "blog_post",
16
+ "page",
17
+ "faq",
18
+ "glossary",
19
+ "comparison",
20
+ "pillar",
21
+ "how_to",
22
+ "landing",
23
+ "listicle",
24
+ "case_study",
25
+ "tutorial",
26
+ "news",
27
+ "product_update",
28
+ "data_report",
29
+ "event",
30
+ "resource",
31
+ "alternative",
32
+ "tool_review",
33
+ ];
34
+ //# sourceMappingURL=content-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-types.js","sourceRoot":"","sources":["../src/content-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,MAAM;IACN,KAAK;IACL,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,UAAU;IACV,YAAY;IACZ,UAAU;IACV,MAAM;IACN,gBAAgB;IAChB,aAAa;IACb,OAAO;IACP,UAAU;IACV,aAAa;IACb,aAAa;CACL,CAAC"}
package/dist/index.js CHANGED
@@ -65,7 +65,7 @@ import { ALL_RESOURCE_TEMPLATES, listAllResources, readResource, getRootResource
65
65
  import { ALL_PROMPTS, getPromptByName, getPromptMessages, } from "./prompts/index.js";
66
66
  // Server metadata
67
67
  const SERVER_NAME = "frase-mcp-server";
68
- const SERVER_VERSION = "0.2.2";
68
+ const SERVER_VERSION = "0.3.7";
69
69
  /**
70
70
  * Main MCP server class
71
71
  */
@@ -1 +1 @@
1
- {"version":3,"file":"content-pipeline.d.ts","sourceRoot":"","sources":["../../src/prompts/content-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,qBAAqB,EAAE,mBAoCnC,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC9E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CAoDD"}
1
+ {"version":3,"file":"content-pipeline.d.ts","sourceRoot":"","sources":["../../src/prompts/content-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,qBAAqB,EAAE,mBAwCnC,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC9E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CAoDD"}
@@ -34,7 +34,10 @@ export const contentPipelinePrompt = {
34
34
  },
35
35
  {
36
36
  name: "content_type",
37
- description: "Type of content: blog, guide, comparison, landing, product (default: blog)",
37
+ description: "Canonical content type (one of 18) e.g. blog_post, how_to, listicle, " +
38
+ "case_study, tutorial, comparison, alternative, tool_review, pillar, landing, " +
39
+ "faq, glossary, news, product_update, data_report, event, resource, page. " +
40
+ "Default: blog_post. See create_brief for the enum.",
38
41
  required: false,
39
42
  },
40
43
  {
@@ -53,7 +56,7 @@ export function getContentPipelineMessages(args) {
53
56
  const topic = args.topic || "the requested topic";
54
57
  const siteId = args.site_id || "";
55
58
  const targetScore = args.target_score || "70";
56
- const contentType = args.content_type || "blog";
59
+ const contentType = args.content_type || "blog_post";
57
60
  const targetLanguage = args.target_language || "en";
58
61
  const targetCountry = args.target_country || "us";
59
62
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"content-pipeline.js","sourceRoot":"","sources":["../../src/prompts/content-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAwB;IACxD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,mNAAmN;IACrN,SAAS,EAAE;QACT;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,yDAAyD;YACtE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,0EAA0E;YACvF,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,4EAA4E;YACzF,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,iFAAiF;YAC9F,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,6EAA6E;YAC1F,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,IAA4B;IAIrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,qBAAqB,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;IAElD,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,sCAAsC,KAAK;;;aAG5C,MAAM;kBACD,WAAW;+BACE,WAAW;cAC5B,cAAc;aACf,aAAa;;;;wDAI8B,KAAK,kBAAkB,MAAM;;;;mBAIlE,WAAW;;;;;;0BAMJ,WAAW;;;;;+DAK0B,MAAM,iKAAiK,MAAM;;4FAEhJ,KAAK,wDAAwD,KAAK;;;;;;;gCAO9H;aACzB;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"content-pipeline.js","sourceRoot":"","sources":["../../src/prompts/content-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAwB;IACxD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,mNAAmN;IACrN,SAAS,EAAE;QACT;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,yDAAyD;YACtE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,0EAA0E;YACvF,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EACT,yEAAyE;gBACzE,+EAA+E;gBAC/E,2EAA2E;gBAC3E,oDAAoD;YACtD,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,iFAAiF;YAC9F,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,6EAA6E;YAC1F,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,IAA4B;IAIrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,qBAAqB,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC;IACrD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;IAElD,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,sCAAsC,KAAK;;;aAG5C,MAAM;kBACD,WAAW;+BACE,WAAW;cAC5B,cAAc;aACf,aAAa;;;;wDAI8B,KAAK,kBAAkB,MAAM;;;;mBAIlE,WAAW;;;;;;0BAMJ,WAAW;;;;;+DAK0B,MAAM,iKAAiK,MAAM;;4FAEhJ,KAAK,wDAAwD,KAAK;;;;;;;gCAO9H;aACzB;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-seo-article.d.ts","sourceRoot":"","sources":["../../src/prompts/create-seo-article.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,sBAAsB,EAAE,mBA2BpC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC/E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CA4DD"}
1
+ {"version":3,"file":"create-seo-article.d.ts","sourceRoot":"","sources":["../../src/prompts/create-seo-article.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,sBAAsB,EAAE,mBA8BpC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC/E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CA4DD"}
@@ -26,7 +26,10 @@ export const createSeoArticlePrompt = {
26
26
  },
27
27
  {
28
28
  name: "content_type",
29
- description: "Type of content: blog, guide, comparison, landing, product (default: blog)",
29
+ description: "Canonical content type (one of 18) e.g. blog_post, how_to, listicle, " +
30
+ "case_study, tutorial, comparison, alternative, tool_review, pillar, landing, " +
31
+ "faq, glossary, news, product_update, data_report, event, resource, page. " +
32
+ "Default: blog_post. See create_brief for the enum.",
30
33
  required: false,
31
34
  },
32
35
  {
@@ -38,7 +41,7 @@ export const createSeoArticlePrompt = {
38
41
  };
39
42
  export function getCreateSeoArticleMessages(args) {
40
43
  const topic = args.topic || "the requested topic";
41
- const contentType = args.content_type || "blog";
44
+ const contentType = args.content_type || "blog_post";
42
45
  const siteId = args.site_id || "";
43
46
  const targetScore = args.target_score || "70";
44
47
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"create-seo-article.js","sourceRoot":"","sources":["../../src/prompts/create-seo-article.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAwB;IACzD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,yPAAyP;IAC3P,SAAS,EAAE;QACT;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,+CAA+C;YAC5D,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,iGAAiG;YAC9G,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EACT,4EAA4E;YAC9E,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,4DAA4D;YACzE,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,IAA4B;IAItE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,qBAAqB,CAAC;IAClD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;IAE9C,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,uDAAuD,KAAK;;;kBAGxD,WAAW;aAChB,MAAM;+BACY,WAAW;;;;6DAImB,KAAK,kBAAkB,MAAM;;;;sBAIpE,WAAW;;;;;;;;;;;;;;;;;;;6BAmBJ,WAAW;;;;;8CAKM,MAAM;0GACsD,MAAM;;;;4EAIpC,KAAK;;;uEAGV;aAChE;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"create-seo-article.js","sourceRoot":"","sources":["../../src/prompts/create-seo-article.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAwB;IACzD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,yPAAyP;IAC3P,SAAS,EAAE;QACT;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,+CAA+C;YAC5D,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,iGAAiG;YAC9G,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EACT,yEAAyE;gBACzE,+EAA+E;gBAC/E,2EAA2E;gBAC3E,oDAAoD;YACtD,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,4DAA4D;YACzE,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,IAA4B;IAItE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,qBAAqB,CAAC;IAClD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;IAE9C,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,uDAAuD,KAAK;;;kBAGxD,WAAW;aAChB,MAAM;+BACY,WAAW;;;;6DAImB,KAAK,kBAAkB,MAAM;;;;sBAIpE,WAAW;;;;;;;;;;;;;;;;;;;6BAmBJ,WAAW;;;;;8CAKM,MAAM;0GACsD,MAAM;;;;4EAIpC,KAAK;;;uEAGV;aAChE;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -3,9 +3,12 @@
3
3
  *
4
4
  * Track how your content appears in AI-powered search results
5
5
  */
6
+ import { z } from "zod";
6
7
  import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
7
8
  export declare const getAiVisibilityTool: McpToolDefinition;
8
9
  export declare function executeGetAiVisibility(input: unknown, context: ToolContext): Promise<ToolResult>;
10
+ export declare const getIndustryBenchmarkTool: McpToolDefinition;
11
+ export declare function executeGetIndustryBenchmark(input: unknown, context: ToolContext): Promise<ToolResult>;
9
12
  export declare const listPromptsTool: McpToolDefinition;
10
13
  export declare function executeListPrompts(input: unknown, context: ToolContext): Promise<ToolResult>;
11
14
  export declare const createPromptTool: McpToolDefinition;
@@ -22,6 +25,17 @@ export declare const getInsightsTool: McpToolDefinition;
22
25
  export declare function executeGetInsights(input: unknown, context: ToolContext): Promise<ToolResult>;
23
26
  export declare const getCrawlerLogsTool: McpToolDefinition;
24
27
  export declare function executeGetCrawlerLogs(input: unknown, context: ToolContext): Promise<ToolResult>;
28
+ export declare const CITATION_FORMULA_FEATURE_LABELS: Record<string, string>;
29
+ export declare function citationFormulaLabelFor(featureName: string): string;
30
+ export declare const getCitationFormulaInputSchema: z.ZodObject<{
31
+ flavor: z.ZodDefault<z.ZodEnum<["active", "full"]>>;
32
+ }, "strict", z.ZodTypeAny, {
33
+ flavor: "full" | "active";
34
+ }, {
35
+ flavor?: "full" | "active" | undefined;
36
+ }>;
37
+ export declare const getCitationFormulaTool: McpToolDefinition;
38
+ export declare function executeGetCitationFormula(input: unknown, context: ToolContext): Promise<ToolResult>;
25
39
  export declare const aiVisibilityTools: McpToolDefinition[];
26
40
  export declare const aiVisibilityExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
27
41
  //# sourceMappingURL=ai-visibility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-visibility.d.ts","sourceRoot":"","sources":["../../src/tools/ai-visibility.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,UAAU,EAGX,MAAM,aAAa,CAAC;AAwIrB,eAAO,MAAM,mBAAmB,EAAE,iBAiBjC,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA8GrB;AAYD,eAAO,MAAM,eAAe,EAAE,iBAoB7B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA8CrB;AAiBD,eAAO,MAAM,gBAAgB,EAAE,iBA8C9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA8CrB;AAUD,eAAO,MAAM,aAAa,EAAE,iBAa3B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAiErB;AAcD,eAAO,MAAM,gBAAgB,EAAE,iBAiC9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAoCrB;AAaD,eAAO,MAAM,kBAAkB,EAAE,iBAwBhC,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAwDrB;AAWD,eAAO,MAAM,aAAa,EAAE,iBAgB3B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAsDrB;AAYD,eAAO,MAAM,eAAe,EAAE,iBAoB7B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAoErB;AAoBD,eAAO,MAAM,kBAAkB,EAAE,iBAqBhC,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAqDrB;AAMD,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,EAUhD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CACxC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAW9D,CAAC"}
1
+ {"version":3,"file":"ai-visibility.d.ts","sourceRoot":"","sources":["../../src/tools/ai-visibility.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,UAAU,EAGX,MAAM,aAAa,CAAC;AAwIrB,eAAO,MAAM,mBAAmB,EAAE,iBAiBjC,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAmHrB;AA2HD,eAAO,MAAM,wBAAwB,EAAE,iBAmBtC,CAAC;AAEF,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAoHrB;AAYD,eAAO,MAAM,eAAe,EAAE,iBAoB7B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA8CrB;AAiBD,eAAO,MAAM,gBAAgB,EAAE,iBA8C9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA8CrB;AAUD,eAAO,MAAM,aAAa,EAAE,iBAa3B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAiErB;AAcD,eAAO,MAAM,gBAAgB,EAAE,iBAiC9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAoCrB;AAaD,eAAO,MAAM,kBAAkB,EAAE,iBAwBhC,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAwDrB;AAWD,eAAO,MAAM,aAAa,EAAE,iBAgB3B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAsDrB;AAYD,eAAO,MAAM,eAAe,EAAE,iBAoB7B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAoErB;AAoBD,eAAO,MAAM,kBAAkB,EAAE,iBAqBhC,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAqDrB;AA8BD,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUlE,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQnE;AAED,eAAO,MAAM,6BAA6B;;;;;;EAI/B,CAAC;AAEZ,eAAO,MAAM,sBAAsB,EAAE,iBAiBpC,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA2FrB;AAMD,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,EAYhD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CACxC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAa9D,CAAC"}