@monoharada/wcf-mcp 0.9.0 → 0.10.0

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "0.1.0",
3
- "indexedAt": "2026-03-03T05:48:07.276Z",
3
+ "indexedAt": "2026-03-10T05:48:39.920Z",
4
4
  "documents": [
5
5
  {
6
6
  "id": ".claude/skills/css-writing-rules/references/core-principles.md",
@@ -4271,14 +4271,71 @@
4271
4271
  "カスタムツール定義の配列",
4272
4272
  "tools",
4273
4273
  "wcfmcpplugintool",
4274
- "データソース差し替え定義の配列",
4275
- "datasources",
4276
- "wcfmcpdatasourceconfig"
4274
+ "validate_",
4275
+ "系に差し込む",
4276
+ "validator",
4277
+ "hook"
4277
4278
  ],
4278
- "snippet": "```typescript\n/** プラグイン定義 */\ninterface WcfMcpPlugin {\n /** プラグイン名(必須。組み込みツール名と重複不可) */\n name: string;\n /** プラグインバージョン(必須。semver 推奨) */\n version: string;\n /** カスタムツール定義の配列 */\n tools?: WcfMcpPluginTool[];\n /** データソース差し替え定義の配列 */\n dataSources?: WcfMcpDataSourceConfig[];\n}\n```",
4279
+ "snippet": "```typescript\n/** プラグイン定義 */\ninterface WcfMcpPlugin {\n /** プラグイン名(必須。組み込みツール名と重複不可) */\n name: string;\n /** プラグインバージョン(必須。semver 推奨) */\n version: string;\n /** カスタムツール定義の配列 */\n tools?: WcfMcpPluginTool[];\n /** validate_* 系に差し込む validator hook */\n validators?: WcfMcpPluginValidator[];\n /** 追加 prompt */\n prompts?: WcfMcpPluginPrompt[];\n /** 追加 resource */\n resources?: WcfMcpPluginResource[];\n /** 追加 resource template */\n resourceTemplates?: WcfMcpPluginResourceTemplate[];\n /** データソース差",
4279
4280
  "body": "",
4280
4281
  "startLine": 9
4281
4282
  },
4283
+ {
4284
+ "heading": "Validator オブジェクト",
4285
+ "keywords": [
4286
+ "validator",
4287
+ "オブジェクト",
4288
+ "typescript",
4289
+ "interface",
4290
+ "wcfmcppluginvalidator",
4291
+ "plugin",
4292
+ "内で一意",
4293
+ "name",
4294
+ "string",
4295
+ "description",
4296
+ "診断配列または",
4297
+ "diagnostics",
4298
+ "を返す",
4299
+ "handler",
4300
+ "input",
4301
+ "filepath",
4302
+ "text",
4303
+ "prefix",
4304
+ "context",
4305
+ "wcfmcphandlercontext"
4306
+ ],
4307
+ "snippet": "```typescript\ninterface WcfMcpPluginValidator {\n /** validator 名(plugin 内で一意) */\n name: string;\n /** 説明 */\n description?: string;\n /** 診断配列または { diagnostics } を返す */\n handler: (\n input: { filePath: string; text: string; prefix: string },\n context: WcfMcpHandlerContext\n ) => Array<Record<string, unknown>> | { diagnostics: Array<Record<string, unknown>> } | Promise<Array<Record<string, unknown>> | { diagnostics: Array<Record<string, unknown>> }>;\n}\n```\n\n### validator hook\n\n- `validate",
4308
+ "body": "### validator hook - `validate_markup` - `validate_files` - `validate_project` 上記 3 tool 実行時に、各 plugin validator が追加診断を返せます。 - `severity` 未指定時は `warning` - `file` 未指定時は対象ファイルへ自動補完 - 失敗した validator は `pluginValidatorRuntimeError` warning として返却",
4309
+ "startLine": 33
4310
+ },
4311
+ {
4312
+ "heading": "Prompt / Resource オブジェクト",
4313
+ "keywords": [
4314
+ "prompt",
4315
+ "resource",
4316
+ "オブジェクト",
4317
+ "typescript",
4318
+ "interface",
4319
+ "wcfmcppluginprompt",
4320
+ "name",
4321
+ "string",
4322
+ "title",
4323
+ "description",
4324
+ "argsschema",
4325
+ "record",
4326
+ "unknown",
4327
+ "zod",
4328
+ "raw",
4329
+ "shape",
4330
+ "plain",
4331
+ "handler",
4332
+ "args",
4333
+ "context"
4334
+ ],
4335
+ "snippet": "```typescript\ninterface WcfMcpPluginPrompt {\n name: string;\n title?: string;\n description?: string;\n argsSchema?: Record<string, unknown>; // zod raw shape or plain shape\n handler?: (args: Record<string, unknown>, context: WcfMcpHandlerContext) => string | { messages: Array<Record<string, unknown>> } | Promise<string | { messages: Array<Record<string, unknown>> }>;\n text?: string;\n}\n\ninterface WcfMcpPluginResource {\n name: string;\n uri: string;\n title?: string;\n description?: string;\n ",
4336
+ "body": "- prompt は `handler` または `text` が必須 - resource は `handler` / `text` / `payload` のいずれかが必須 - resourceTemplate も `handler` / `text` / `payload` のいずれかが必須 - prompt 名は組み込み prompt と重複不可 - resource URI は組み込み resource URI と重複不可 - resource template URI は組み込み template URI と重複不可",
4337
+ "startLine": 61
4338
+ },
4282
4339
  {
4283
4340
  "heading": "Tool オブジェクト",
4284
4341
  "keywords": [
@@ -4304,8 +4361,8 @@
4304
4361
  "両方指定時は"
4305
4362
  ],
4306
4363
  "snippet": "```typescript\n/** カスタムツール定義 */\ninterface WcfMcpPluginTool {\n /** ツール名(必須。組み込みツール名と重複不可) */\n name: string;\n /** ツールの説明 */\n description?: string;\n /** 入力スキーマ(JSON Schema 形式) */\n inputSchema?: Record<string, unknown>;\n /** 動的ハンドラ関数。両方指定時は handler が優先される */\n handler?: (args: Record<string, unknown>, context: WcfMcpHandlerContext) => unknown | Promise<unknown>;\n /** 静的レスポンスペイロード。handler がある場合は無視される */\n staticPayload?: unknown;\n}\n```\n\n### handler vs staticPayload\n\n- `handler`: リクエストごとに実行される関",
4307
- "body": "### handler vs staticPayload - `handler`: リクエストごとに実行される関数。動的な結果を返す場合に使用 - `staticPayload`: 固定のレスポンスを返す場合に使用 - **両方指定した場合**: `handler` が優先され、`staticPayload` は無視される - **どちらも未指定**: バリデーションエラー(少なくとも一方が必須)",
4308
- "startLine": 25
4364
+ "body": "### handler vs staticPayload - `handler`: リクエストごとに実行される関数。動的な結果を返す場合に使用 - `staticPayload`: 固定のレスポンスを返す場合に使用 - **両方指定した場合**: `handler` が優先され、`staticPayload` は無視される - **どちらも未指定**: バリデーションエラー(少なくとも一方が必須) - `handler` は plain payload のほか raw MCP result(`{ content: [...] }`)を返してもよい - ただし最終返却サイズには 100KB 上限が適用され、上限を超える raw result は `TOOL_RESULT_TOO_LARGE` warning payload に置き換わる",
4365
+ "startLine": 108
4309
4366
  },
4310
4367
  {
4311
4368
  "heading": "Handler Context",
@@ -4329,11 +4386,11 @@
4329
4386
  "filename",
4330
4387
  "promise",
4331
4388
  "unknown",
4332
- "ツール応答を"
4389
+ "テキストデータファイルを読み込む"
4333
4390
  ],
4334
- "snippet": "```typescript\n/** handler 関数に渡されるコンテキスト */\ninterface WcfMcpHandlerContext {\n /** プラグイン自身の情報 */\n plugin: { name: string; version: string };\n /** 共通ヘルパー */\n helpers: {\n /** JSON データファイルを読み込む */\n loadJsonData: (fileName: string) => Promise<unknown>;\n /** ツール応答を MCP 形式の JSON テキストに変換する */\n buildJsonToolResponse: (payload: unknown) => { content: Array<{ type: string; text: string }> };\n /** prefix を正規化する(デフォルト: \"dads\") */\n normalizePrefix: (prefix?: string) => string;\n /** タグ名",
4391
+ "snippet": "```typescript\n/** handler 関数に渡されるコンテキスト */\ninterface WcfMcpHandlerContext {\n /** プラグイン自身の情報 */\n plugin: { name: string; version: string };\n /** 共通ヘルパー */\n helpers: {\n /** JSON データファイルを読み込む */\n loadJsonData: (fileName: string) => Promise<unknown>;\n /** テキストデータファイルを読み込む (v1.1+) */\n loadTextData: (fileName: string) => Promise<string>;\n /** ツール応答を MCP 形式の JSON テキストに変換する */\n buildJsonToolResponse: (payload: unknown) => { content: Array<{ type: string; text: string }> };\n /** ",
4335
4392
  "body": "",
4336
- "startLine": 50
4393
+ "startLine": 135
4337
4394
  },
4338
4395
  {
4339
4396
  "heading": "DataSource オブジェクト",
@@ -4359,9 +4416,9 @@
4359
4416
  "manifest",
4360
4417
  "install-registry"
4361
4418
  ],
4362
- "snippet": "```typescript\n/** データソース差し替え定義 */\ninterface WcfMcpDataSourceConfig {\n /** 差し替え対象のファイル名 */\n fileName: string;\n /** 差し替えファイルのパス */\n path: string;\n}\n```\n\n### 差し替え可能なファイル\n\n| fileName | 説明 |\n|----------|------|\n| `custom-elements.json` | Custom Elements Manifest |\n| `install-registry.json` | インストールレジストリ |\n| `pattern-registry.json` | パターンレジストリ |\n| `design-tokens.json` | デザイントークン |\n| `guidelines-index.json` | ガイドラインインデックス |",
4363
- "body": "### 差し替え可能なファイル | fileName | 説明 | |----------|------| | `custom-elements.json` | Custom Elements Manifest | | `install-registry.json` | インストールレジストリ | | `pattern-registry.json` | パターンレジストリ | | `design-tokens.json` | デザイントークン | | `guidelines-index.json` | ガイドラインインデックス |",
4364
- "startLine": 73
4419
+ "snippet": "```typescript\n/** データソース差し替え定義 */\ninterface WcfMcpDataSourceConfig {\n /** 差し替え対象のファイル名 */\n fileName: string;\n /** 差し替えファイルのパス */\n path: string;\n}\n```\n\n### 差し替え可能なファイル\n\n| fileName | 説明 |\n|----------|------|\n| `custom-elements.json` | Custom Elements Manifest |\n| `install-registry.json` | インストールレジストリ |\n| `pattern-registry.json` | パターンレジストリ |\n| `component-selector-guide.json` | コンポーネント選択ガイド |\n| `design-tokens.json` | デザイントークン |\n| `guidelines-index.json` | ガイドラインインデックス |\n| `skills-registry.json`",
4420
+ "body": "### 差し替え可能なファイル | fileName | 説明 | |----------|------| | `custom-elements.json` | Custom Elements Manifest | | `install-registry.json` | インストールレジストリ | | `pattern-registry.json` | パターンレジストリ | | `component-selector-guide.json` | コンポーネント選択ガイド | | `design-tokens.json` | デザイントークン | | `guidelines-index.json` | ガイドラインインデックス | | `skills-registry.json` | スキルレジストリ | | `llms-full.txt` | LLM 向け全文リファレンス |",
4421
+ "startLine": 160
4365
4422
  },
4366
4423
  {
4367
4424
  "heading": "バリデーションルール",
@@ -4373,12 +4430,12 @@
4373
4430
  "ツール名は組み込みツール名と重複不可",
4374
4431
  "複数プラグイン間でツール名の重複不可",
4375
4432
  "datasources",
4376
- "のファイル名は上記5種のみ",
4433
+ "のファイル名は上記8種のみ",
4377
4434
  "複数プラグイン間で同一ファイルの重複差し替え不可"
4378
4435
  ],
4379
- "snippet": "1. `name` と `version` は必須\n2. ツール名は組み込みツール名と重複不可\n3. 複数プラグイン間でツール名の重複不可\n4. `dataSources` のファイル名は上記5種のみ\n5. 複数プラグイン間で同一ファイルの重複差し替え不可",
4380
- "body": "1. `name` と `version` は必須 2. ツール名は組み込みツール名と重複不可 3. 複数プラグイン間でツール名の重複不可 4. `dataSources` のファイル名は上記5種のみ 5. 複数プラグイン間で同一ファイルの重複差し替え不可",
4381
- "startLine": 95
4436
+ "snippet": "1. `name` と `version` は必須\n2. ツール名は組み込みツール名と重複不可\n3. 複数プラグイン間でツール名の重複不可\n4. `dataSources` のファイル名は上記8種のみ\n5. 複数プラグイン間で同一ファイルの重複差し替え不可",
4437
+ "body": "1. `name` と `version` は必須 2. ツール名は組み込みツール名と重複不可 3. 複数プラグイン間でツール名の重複不可 4. `dataSources` のファイル名は上記8種のみ 5. 複数プラグイン間で同一ファイルの重複差し替え不可",
4438
+ "startLine": 185
4382
4439
  },
4383
4440
  {
4384
4441
  "heading": "互換性ポリシー",
@@ -4387,15 +4444,26 @@
4387
4444
  "契約バージョン",
4388
4445
  "plugin_contract_version",
4389
4446
  "定数で公開",
4390
- "破壊的変更なし",
4391
- "新フィールドは追加のみ",
4392
- "既存フィールドの削除・型変更なし",
4393
- "破壊的変更を含む可能性あり",
4394
- "メジャーバージョンアップで通知"
4447
+ "helpers",
4448
+ "loadtextdata",
4449
+ "テキストファイルの読み込み",
4450
+ "utf-8",
4451
+ "validators",
4452
+ "validate_",
4453
+ "tool",
4454
+ "へ差し込む",
4455
+ "validator",
4456
+ "hook",
4457
+ "prompts",
4458
+ "resources",
4459
+ "plugin",
4460
+ "mcp",
4461
+ "prompt",
4462
+ "resource"
4395
4463
  ],
4396
- "snippet": "- **契約バージョン**: `1.0.0`(`PLUGIN_CONTRACT_VERSION` 定数で公開)\n- **v1.x 内**: 破壊的変更なし。新フィールドは追加のみ(既存フィールドの削除・型変更なし)\n- **v2.0**: 破壊的変更を含む可能性あり。メジャーバージョンアップで通知",
4397
- "body": "- **契約バージョン**: `1.0.0`(`PLUGIN_CONTRACT_VERSION` 定数で公開) - **v1.x 内**: 破壊的変更なし。新フィールドは追加のみ(既存フィールドの削除・型変更なし) - **v2.0**: 破壊的変更を含む可能性あり。メジャーバージョンアップで通知",
4398
- "startLine": 103
4464
+ "snippet": "- **契約バージョン**: `1.4.0`(`PLUGIN_CONTRACT_VERSION` 定数で公開)\n- **v1.1 追加**: `helpers.loadTextData` — テキストファイルの読み込み(UTF-8)\n- **v1.2 追加**: `validators` — validate_* tool へ差し込む validator hook\n- **v1.3 追加**: `prompts`, `resources` — plugin から MCP prompt/resource を追加\n- **v1.4 追加**: `resourceTemplates`, prompt の richer `argsSchema` shape\n- **v1.x 内**: 破壊的変更なし。新フィールドは追加のみ(既存フィールドの削除・型変更なし)\n- **v2.0**: 破壊的変更を含む可能性あり。メジャーバージョンアップで通知",
4465
+ "body": "- **契約バージョン**: `1.4.0`(`PLUGIN_CONTRACT_VERSION` 定数で公開) - **v1.1 追加**: `helpers.loadTextData` — テキストファイルの読み込み(UTF-8) - **v1.2 追加**: `validators` — validate_* tool へ差し込む validator hook - **v1.3 追加**: `prompts`, `resources` — plugin から MCP prompt/resource を追加 - **v1.4 追加**: `resourceTemplates`, prompt の richer `argsSchema` shape - **v1.x 内**: 破壊的変更なし。新フィールドは追加のみ(既存フィールドの削除・型変更なし) - **v2.0**: 破壊的変更を含む可能性あり。メジャーバージョンアップで通知",
4466
+ "startLine": 193
4399
4467
  },
4400
4468
  {
4401
4469
  "heading": "@experimental 機能",
@@ -4410,7 +4478,7 @@
4410
4478
  ],
4411
4479
  "snippet": "以下は将来追加される可能性がありますが、まだ安定していません:\n\n- ライフサイクルフック(`onInit`, `onDestroy`)\n- プラグイン間依存の宣言",
4412
4480
  "body": "以下は将来追加される可能性がありますが、まだ安定していません: - ライフサイクルフック(`onInit`, `onDestroy`) - プラグイン間依存の宣言",
4413
- "startLine": 109
4481
+ "startLine": 203
4414
4482
  },
4415
4483
  {
4416
4484
  "heading": "設定ファイルからの利用",
@@ -4438,7 +4506,7 @@
4438
4506
  ],
4439
4507
  "snippet": "```json\n{\n \"plugins\": [\n {\n \"module\": \"./plugins/my-plugin.mjs\"\n },\n {\n \"name\": \"static-tools\",\n \"version\": \"1.0.0\",\n \"staticTools\": [\n { \"name\": \"my_tool\", \"payload\": { \"ok\": true } }\n ]\n }\n ]\n}\n```\n\n### module プラグイン\n\nESM ファイルが `default export` でプラグインオブジェクトを返す:\n\n```javascript\n// plugins/my-plugin.mjs\nexport default {\n name: 'my-plugin',\n version: '1.0.0',\n tools: [\n {\n name: 'my_custom_tool',\n description: 'Custom tool from plugin',\n",
4440
4508
  "body": "### module プラグイン ESM ファイルが `default export` でプラグインオブジェクトを返す:",
4441
- "startLine": 116
4509
+ "startLine": 210
4442
4510
  }
4443
4511
  ]
4444
4512
  },
@@ -5083,9 +5083,9 @@ Requires: `heading`, `fieldset`, `input-text`, `select`, `textarea`, `button`
5083
5083
  <form id="application-form-single">
5084
5084
  <dads-fieldset>
5085
5085
  <legend>申請情報</legend>
5086
- <dads-input-text name="name" required error error-text="氏名は必須です"></dads-input-text>
5087
- <dads-select name="type" required></dads-select>
5088
- <dads-textarea name="reason" required></dads-textarea>
5086
+ <dads-input-text label="氏名" name="name" required error error-text="氏名は必須です"></dads-input-text>
5087
+ <dads-select label="種別" name="type" required></dads-select>
5088
+ <dads-textarea label="理由" name="reason" required></dads-textarea>
5089
5089
  </dads-fieldset>
5090
5090
  <dads-button type="submit">送信</dads-button>
5091
5091
  </form>
@@ -5105,7 +5105,7 @@ Requires: `heading`, `step-navigation`, `fieldset`, `input-text`, `button`
5105
5105
  <form id="application-form-step">
5106
5106
  <dads-fieldset>
5107
5107
  <legend>ステップ1: 申請者情報</legend>
5108
- <dads-input-text name="name" required error error-text="氏名は必須です"></dads-input-text>
5108
+ <dads-input-text label="氏名" name="name" required error error-text="氏名は必須です"></dads-input-text>
5109
5109
  </dads-fieldset>
5110
5110
  <dads-button type="submit">次へ</dads-button>
5111
5111
  </form>
@@ -5184,9 +5184,9 @@ Requires: `device-mock`, `heading`, `fieldset`, `input-text`, `select`, `textare
5184
5184
  <form>
5185
5185
  <dads-fieldset>
5186
5186
  <legend>基本情報</legend>
5187
- <dads-input-text name="name" required></dads-input-text>
5188
- <dads-select name="type" required></dads-select>
5189
- <dads-textarea name="detail" required></dads-textarea>
5187
+ <dads-input-text label="氏名" name="name" required></dads-input-text>
5188
+ <dads-select label="種別" name="type" required></dads-select>
5189
+ <dads-textarea label="詳細" name="detail" required></dads-textarea>
5190
5190
  </dads-fieldset>
5191
5191
  <dads-button type="submit">確認へ進む</dads-button>
5192
5192
  </form>
@@ -0,0 +1,345 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "sourceOfTruth": ".claude/skills",
4
+ "clients": {
5
+ "codex": {
6
+ "description": "Codex local skills install destination (~/.codex/skills)"
7
+ },
8
+ "claude_code": {
9
+ "description": "Claude Code project-level skill references"
10
+ },
11
+ "cursor": {
12
+ "description": "Cursor project-level skill references"
13
+ }
14
+ },
15
+ "skills": [
16
+ {
17
+ "name": "component-design-study",
18
+ "path": ".claude/skills/component-design-study",
19
+ "entry": "SKILL.md",
20
+ "clients": [
21
+ "codex",
22
+ "claude_code",
23
+ "cursor"
24
+ ],
25
+ "status": "active",
26
+ "description": "Drive design studies for new web components with evidence-based variant selection.",
27
+ "tags": [
28
+ "spec",
29
+ "workflow"
30
+ ],
31
+ "version": "1.0.0",
32
+ "dependencies": [],
33
+ "compat": {
34
+ "minVersion": {
35
+ "claude_code": "1.0",
36
+ "cursor": "0.50",
37
+ "codex": "0.1"
38
+ },
39
+ "capabilities": [
40
+ "read_repo",
41
+ "web_fetch"
42
+ ]
43
+ },
44
+ "manifest": {
45
+ "author": "wcf-team",
46
+ "license": "MIT",
47
+ "entryFormat": "markdown",
48
+ "sections": [
49
+ "overview",
50
+ "workflow",
51
+ "do_dont",
52
+ "references"
53
+ ],
54
+ "sizeBytes": 30404,
55
+ "lastUpdated": "2026-03-04"
56
+ }
57
+ },
58
+ {
59
+ "name": "css-writing-rules",
60
+ "path": ".claude/skills/css-writing-rules",
61
+ "entry": "SKILL.md",
62
+ "clients": [
63
+ "codex",
64
+ "claude_code",
65
+ "cursor"
66
+ ],
67
+ "status": "active",
68
+ "description": "CSS coding guidelines for Web Components with Shadow DOM.",
69
+ "tags": [
70
+ "spec",
71
+ "token"
72
+ ],
73
+ "version": "1.0.0",
74
+ "dependencies": [],
75
+ "compat": {
76
+ "minVersion": {
77
+ "claude_code": "1.0",
78
+ "cursor": "0.50",
79
+ "codex": "0.1"
80
+ },
81
+ "capabilities": [
82
+ "read_repo"
83
+ ]
84
+ },
85
+ "manifest": {
86
+ "author": "wcf-team",
87
+ "license": "MIT",
88
+ "entryFormat": "markdown",
89
+ "sections": [
90
+ "overview",
91
+ "workflow",
92
+ "do_dont",
93
+ "references"
94
+ ],
95
+ "sizeBytes": 43328,
96
+ "lastUpdated": "2026-03-04"
97
+ }
98
+ },
99
+ {
100
+ "name": "headless-component-design",
101
+ "path": ".claude/skills/headless-component-design",
102
+ "entry": "SKILL.md",
103
+ "clients": [
104
+ "codex",
105
+ "claude_code",
106
+ "cursor"
107
+ ],
108
+ "status": "active",
109
+ "description": "Headless Web Component design patterns with DADS conventions.",
110
+ "tags": [
111
+ "spec"
112
+ ],
113
+ "version": "1.0.0",
114
+ "dependencies": [],
115
+ "compat": {
116
+ "minVersion": {
117
+ "claude_code": "1.0",
118
+ "cursor": "0.50",
119
+ "codex": "0.1"
120
+ },
121
+ "capabilities": [
122
+ "read_repo"
123
+ ]
124
+ },
125
+ "manifest": {
126
+ "author": "wcf-team",
127
+ "license": "MIT",
128
+ "entryFormat": "markdown",
129
+ "sections": [
130
+ "overview",
131
+ "do_dont",
132
+ "references"
133
+ ],
134
+ "sizeBytes": 24403,
135
+ "lastUpdated": "2026-03-04"
136
+ }
137
+ },
138
+ {
139
+ "name": "wcf-compose",
140
+ "path": ".claude/skills/wcf-compose",
141
+ "entry": "SKILL.md",
142
+ "clients": [
143
+ "codex",
144
+ "claude_code",
145
+ "cursor"
146
+ ],
147
+ "status": "active",
148
+ "description": "Compose screen HTML and state variants from installed component IDs.",
149
+ "tags": [
150
+ "workflow"
151
+ ],
152
+ "version": "1.0.0",
153
+ "dependencies": [
154
+ "wcf-install"
155
+ ],
156
+ "compat": {
157
+ "minVersion": {
158
+ "claude_code": "1.0",
159
+ "cursor": "0.50",
160
+ "codex": "0.1"
161
+ },
162
+ "capabilities": [
163
+ "read_repo",
164
+ "write_repo"
165
+ ]
166
+ },
167
+ "manifest": {
168
+ "author": "wcf-team",
169
+ "license": "MIT",
170
+ "entryFormat": "markdown",
171
+ "sections": [
172
+ "overview",
173
+ "workflow"
174
+ ],
175
+ "sizeBytes": 2333,
176
+ "lastUpdated": "2026-03-04"
177
+ }
178
+ },
179
+ {
180
+ "name": "wcf-discovery",
181
+ "path": ".claude/skills/wcf-discovery",
182
+ "entry": "SKILL.md",
183
+ "clients": [
184
+ "codex",
185
+ "claude_code",
186
+ "cursor"
187
+ ],
188
+ "status": "active",
189
+ "description": "Discover component IDs and patterns from screen requirements.",
190
+ "tags": [
191
+ "workflow"
192
+ ],
193
+ "version": "1.0.0",
194
+ "dependencies": [],
195
+ "compat": {
196
+ "minVersion": {
197
+ "claude_code": "1.0",
198
+ "cursor": "0.50",
199
+ "codex": "0.1"
200
+ },
201
+ "capabilities": [
202
+ "read_repo",
203
+ "mcp_tools"
204
+ ]
205
+ },
206
+ "manifest": {
207
+ "author": "wcf-team",
208
+ "license": "MIT",
209
+ "entryFormat": "markdown",
210
+ "sections": [
211
+ "overview",
212
+ "workflow"
213
+ ],
214
+ "sizeBytes": 2514,
215
+ "lastUpdated": "2026-03-04"
216
+ }
217
+ },
218
+ {
219
+ "name": "wcf-install",
220
+ "path": ".claude/skills/wcf-install",
221
+ "entry": "SKILL.md",
222
+ "clients": [
223
+ "codex",
224
+ "claude_code",
225
+ "cursor"
226
+ ],
227
+ "status": "active",
228
+ "description": "Resolve install order and generate WCF install commands.",
229
+ "tags": [
230
+ "workflow"
231
+ ],
232
+ "version": "1.0.0",
233
+ "dependencies": [
234
+ "wcf-discovery"
235
+ ],
236
+ "compat": {
237
+ "minVersion": {
238
+ "claude_code": "1.0",
239
+ "cursor": "0.50",
240
+ "codex": "0.1"
241
+ },
242
+ "capabilities": [
243
+ "read_repo",
244
+ "run_commands"
245
+ ]
246
+ },
247
+ "manifest": {
248
+ "author": "wcf-team",
249
+ "license": "MIT",
250
+ "entryFormat": "markdown",
251
+ "sections": [
252
+ "overview",
253
+ "workflow"
254
+ ],
255
+ "sizeBytes": 2341,
256
+ "lastUpdated": "2026-03-04"
257
+ }
258
+ },
259
+ {
260
+ "name": "wcf-ui-builder",
261
+ "path": ".claude/skills/wcf-ui-builder",
262
+ "entry": "SKILL.md",
263
+ "clients": [
264
+ "codex",
265
+ "claude_code",
266
+ "cursor"
267
+ ],
268
+ "status": "active",
269
+ "description": "Orchestrator skill for discovery, install, compose, and validate flow.",
270
+ "tags": [
271
+ "workflow"
272
+ ],
273
+ "version": "1.0.0",
274
+ "dependencies": [
275
+ "wcf-discovery",
276
+ "wcf-install",
277
+ "wcf-compose",
278
+ "wcf-validate"
279
+ ],
280
+ "compat": {
281
+ "minVersion": {
282
+ "claude_code": "1.0",
283
+ "cursor": "0.50",
284
+ "codex": "0.1"
285
+ },
286
+ "capabilities": [
287
+ "read_repo",
288
+ "write_repo",
289
+ "mcp_tools"
290
+ ]
291
+ },
292
+ "manifest": {
293
+ "author": "wcf-team",
294
+ "license": "MIT",
295
+ "entryFormat": "markdown",
296
+ "sections": [
297
+ "overview",
298
+ "workflow"
299
+ ],
300
+ "sizeBytes": 1986,
301
+ "lastUpdated": "2026-03-04"
302
+ }
303
+ },
304
+ {
305
+ "name": "wcf-validate",
306
+ "path": ".claude/skills/wcf-validate",
307
+ "entry": "SKILL.md",
308
+ "clients": [
309
+ "codex",
310
+ "claude_code",
311
+ "cursor"
312
+ ],
313
+ "status": "active",
314
+ "description": "Validate generated markup and return diagnostics with fix suggestions.",
315
+ "tags": [
316
+ "audit"
317
+ ],
318
+ "version": "1.0.0",
319
+ "dependencies": [],
320
+ "compat": {
321
+ "minVersion": {
322
+ "claude_code": "1.0",
323
+ "cursor": "0.50",
324
+ "codex": "0.1"
325
+ },
326
+ "capabilities": [
327
+ "read_repo",
328
+ "mcp_tools"
329
+ ]
330
+ },
331
+ "manifest": {
332
+ "author": "wcf-team",
333
+ "license": "MIT",
334
+ "entryFormat": "markdown",
335
+ "sections": [
336
+ "overview",
337
+ "workflow",
338
+ "do_dont"
339
+ ],
340
+ "sizeBytes": 2129,
341
+ "lastUpdated": "2026-03-04"
342
+ }
343
+ }
344
+ ]
345
+ }
@@ -2,6 +2,9 @@
2
2
  * Sample plugin for wcf-mcp (Plugin Contract v1).
3
3
  * Demonstrates:
4
4
  * - Custom tool with handler
5
+ * - Validator hook used by validate_markup / validate_files / validate_project
6
+ * - Static prompt and resource hooks
7
+ * - Resource template hook
5
8
  * - Custom tool using handler context (helpers.loadJsonData)
6
9
  * - dataSources override for guidelines-index.json
7
10
  */
@@ -33,6 +36,64 @@ export default {
33
36
  path: './custom-guidelines.json',
34
37
  },
35
38
  ],
39
+ validators: [
40
+ {
41
+ name: 'heading_structure',
42
+ description: 'Warn on skipped heading levels during validate_* flows.',
43
+ async handler({ text, filePath }) {
44
+ const diagnostics = detectSkippedHeadingLevel(text).map((item) => ({
45
+ file: filePath,
46
+ severity: 'warning',
47
+ code: item.code,
48
+ message: item.message,
49
+ hint: 'Use sequential heading levels (e.g. h2 -> h3).',
50
+ }));
51
+ return { diagnostics };
52
+ },
53
+ },
54
+ ],
55
+ prompts: [
56
+ {
57
+ name: 'custom_validation_workflow',
58
+ title: 'Custom Validation Workflow',
59
+ argsSchema: {
60
+ audience: {
61
+ type: 'string',
62
+ description: 'Optional audience label',
63
+ },
64
+ },
65
+ text: 'Run validate_markup, then validate_files for page-level issues, then inspect custom guidelines.',
66
+ },
67
+ ],
68
+ resources: [
69
+ {
70
+ name: 'custom_validation_notes',
71
+ uri: 'plugin://custom-validation/notes',
72
+ mimeType: 'text/plain',
73
+ text: 'Custom validation plugin loaded. Use validate_heading_structure for manual checks.',
74
+ },
75
+ ],
76
+ resourceTemplates: [
77
+ {
78
+ name: 'custom_guideline_template',
79
+ uriTemplate: 'plugin://custom-validation/guidelines/{slug}',
80
+ complete: {
81
+ slug: ['headings', 'forms'],
82
+ },
83
+ async handler({ uri, variables }) {
84
+ return {
85
+ contents: [{
86
+ uri,
87
+ mimeType: 'application/json',
88
+ text: JSON.stringify({
89
+ slug: variables?.slug ?? '',
90
+ note: 'Custom guideline template resource',
91
+ }, null, 2),
92
+ }],
93
+ };
94
+ },
95
+ },
96
+ ],
36
97
  tools: [
37
98
  {
38
99
  name: 'validate_heading_structure',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monoharada/wcf-mcp",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "MCP server for the web-components-factory design system. Provides component discovery, validation, and pattern-based UI composition without cloning the repository.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,7 +9,9 @@
9
9
  "files": [
10
10
  "bin.mjs",
11
11
  "core.mjs",
12
+ "core/",
12
13
  "server.mjs",
14
+ "runtime-data.mjs",
13
15
  "validator.mjs",
14
16
  "data/",
15
17
  "examples/",