@modootoday/pmcp 0.9.0 → 0.9.2

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/README.md CHANGED
@@ -142,21 +142,25 @@ breaks the specification is reported, and `pmcp validate [<skill-dir>...]` check
142
142
  directories or every skill the catalog reaches (name rules and length, description and
143
143
  compatibility length, field types, name matching the directory, duplicate names).
144
144
 
145
- `metadata` keeps strings, string lists and maps of those one level down, so
146
- `requires: {mcp, bin, env, capabilities, gpu-gb}` reaches `skill_describe`; deeper
147
- nesting is dropped.
145
+ `metadata` keeps strings, string lists and maps of those one level down; `skill_describe`
146
+ reports a map as dotted keys, so `requires: {mcp, gpu-gb}` arrives as `requires.mcp` and
147
+ `requires.gpu-gb`. Deeper nesting is dropped.
148
+
149
+ Output schemas accept additional properties, so a field added later does not break a
150
+ client that cached an earlier tool list. An answer to a call without the newer inputs keeps
151
+ the earlier shape.
148
152
 
149
153
  Since 0.9.0 a skill can list `metadata.verified-runtimes`, a list drawn from `claude-code`,
150
154
  `codex-cli`, `gemini-cli`, `grok-cli` and `antigravity`, meaning its effect was verified on
151
- that runtime. `skill_find` and `skill_catalog` items carry `verifiedRuntimes` (omitted when
152
- empty) and accept `runtime` and `verifiedOnly`. `runtime` never removes a skill: it marks
155
+ that runtime. `skill_find` and `skill_catalog` accept `runtime` and `verifiedOnly`; when either
156
+ is given, items carry `verifiedRuntimes` (omitted when empty). `runtime` never removes a skill: it marks
153
157
  each item `verified` and lists verified ones first (within a package group in
154
158
  `skill_catalog`). `verifiedOnly` drops the rest, keeping those verified on `runtime`, or on
155
159
  any runtime when none is given. Without `runtime` the answer is ordered exactly as before.
156
160
  A server can opt in with `rankByClientRuntime: true`: then, when `runtime` is not passed and
157
161
  the MCP client's name is recognised (`claude-code`, `codex`, `gemini`, `grok`,
158
162
  `antigravity`), that runtime is used for the ordering only, never for filtering.
159
- `skill_find` answers with `runtime`, the one the ordering used, or `null`.
163
+ `skill_find` then answers with `runtime`, the one the ordering used, or `null`.
160
164
 
161
165
  `pmcp serve --prompts` also offers one prompt per skill, for hosts that turn prompts into
162
166
  commands; the prompt's text is the skill body and its file list, with an optional `task`.
@@ -1103,7 +1103,8 @@ function matches(entry, filters) {
1103
1103
  }
1104
1104
  return true;
1105
1105
  }
1106
- function verification(entry, runtime) {
1106
+ function verification(entry, runtime, asked) {
1107
+ if (!asked) return {};
1107
1108
  const verifiedRuntimes = verifiedRuntimesOf(entry?.metadata);
1108
1109
  return {
1109
1110
  ...verifiedRuntimes.length > 0 ? { verifiedRuntimes } : {},
@@ -1116,15 +1117,28 @@ function verifiedFirst(items) {
1116
1117
  ...items.filter((item) => item.verified !== true)
1117
1118
  ];
1118
1119
  }
1119
- function catalogItem(entry, runtime) {
1120
+ function catalogItem(entry, runtime, asked) {
1120
1121
  return {
1121
1122
  name: entry.name,
1122
1123
  description: entry.description,
1123
1124
  ...entry.tier === void 0 ? {} : { tier: entry.tier },
1124
1125
  ...kindOf(entry) === "skill" ? {} : { kind: kindOf(entry) },
1125
- ...verification(entry, runtime)
1126
+ ...verification(entry, runtime, asked)
1126
1127
  };
1127
1128
  }
1129
+ function flatMetadata(metadata) {
1130
+ const flat = {};
1131
+ for (const [key, value] of Object.entries(metadata ?? {})) {
1132
+ if (typeof value === "string" || Array.isArray(value)) {
1133
+ flat[key] = value;
1134
+ continue;
1135
+ }
1136
+ for (const [inner, leaf] of Object.entries(value ?? {})) {
1137
+ flat[`${key}.${inner}`] = leaf;
1138
+ }
1139
+ }
1140
+ return flat;
1141
+ }
1128
1142
  function createSkillTools(options) {
1129
1143
  const load = options.loadCatalog ?? readCatalog;
1130
1144
  let entries = null;
@@ -1149,6 +1163,7 @@ function createSkillTools(options) {
1149
1163
  catalog(request = {}) {
1150
1164
  const client = options.rankByClientRuntime ? request.clientRuntime : null;
1151
1165
  const runtime = request.runtime ?? client ?? null;
1166
+ const asked = runtime !== null || request.verifiedOnly !== void 0;
1152
1167
  const byPackage = /* @__PURE__ */ new Map();
1153
1168
  let count = 0;
1154
1169
  for (const entry of catalog()) {
@@ -1161,7 +1176,7 @@ function createSkillTools(options) {
1161
1176
  continue;
1162
1177
  count += 1;
1163
1178
  const list = byPackage.get(entry.package) ?? [];
1164
- list.push(catalogItem(entry, runtime));
1179
+ list.push(catalogItem(entry, runtime, asked));
1165
1180
  byPackage.set(entry.package, list);
1166
1181
  }
1167
1182
  const groups = [...byPackage.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([pkg, skills]) => [
@@ -1186,6 +1201,7 @@ function createSkillTools(options) {
1186
1201
  find(intent, limit, filters, clientRuntime) {
1187
1202
  const client = options.rankByClientRuntime ? clientRuntime : null;
1188
1203
  const runtime = filters?.runtime ?? client ?? null;
1204
+ const asked = runtime !== null || filters?.verifiedOnly !== void 0;
1189
1205
  const scoped = catalog().filter((entry) => matches(entry, filters)).map(
1190
1206
  (entry) => entry.keywords && entry.keywords.length > 0 ? {
1191
1207
  ...entry,
@@ -1205,13 +1221,13 @@ function createSkillTools(options) {
1205
1221
  return {
1206
1222
  ...match,
1207
1223
  description: entry?.description ?? match.description,
1208
- ...verification(entry, runtime)
1224
+ ...verification(entry, runtime, asked)
1209
1225
  };
1210
1226
  });
1211
1227
  const ordered = runtime === null ? marked : verifiedFirst(marked);
1212
1228
  return {
1213
1229
  ...result,
1214
- runtime,
1230
+ ...asked ? { runtime } : {},
1215
1231
  matches: runtime === null ? ordered : ordered.slice(0, limit ?? DEFAULT_FIND_LIMIT)
1216
1232
  };
1217
1233
  });
@@ -1228,9 +1244,9 @@ function createSkillTools(options) {
1228
1244
  package: entry.package,
1229
1245
  description: entry.description,
1230
1246
  ...entry.tier === void 0 ? {} : { tier: entry.tier },
1231
- metadata: entry.metadata ?? {},
1247
+ metadata: flatMetadata(entry.metadata),
1232
1248
  frontmatter: readFrontmatterText(source),
1233
- files: [...listing2.files],
1249
+ files: listing2.files.map((file) => ({ ...file })),
1234
1250
  filesTruncated: listing2.truncated
1235
1251
  };
1236
1252
  },
@@ -1404,7 +1420,7 @@ function registerSkillsExtension(server, skills, options = {}) {
1404
1420
  import { z as z3 } from "zod";
1405
1421
  var kind = z3.enum(ASSET_KINDS);
1406
1422
  var runtimeSchema = z3.enum(RUNTIMES);
1407
- var catalogItemSchema = z3.object({
1423
+ var catalogItemSchema = z3.looseObject({
1408
1424
  name: z3.string(),
1409
1425
  description: z3.string(),
1410
1426
  tier: z3.string().optional(),
@@ -1412,20 +1428,20 @@ var catalogItemSchema = z3.object({
1412
1428
  verifiedRuntimes: z3.array(runtimeSchema).optional(),
1413
1429
  verified: z3.boolean().optional()
1414
1430
  });
1415
- var catalogResponseSchema = z3.object({
1431
+ var catalogResponseSchema = z3.looseObject({
1416
1432
  count: z3.number().int(),
1417
1433
  page: z3.number().int(),
1418
1434
  totalPages: z3.number().int(),
1419
1435
  hasNext: z3.boolean(),
1420
1436
  packages: z3.array(
1421
- z3.object({ package: z3.string(), skills: z3.array(catalogItemSchema) })
1437
+ z3.looseObject({ package: z3.string(), skills: z3.array(catalogItemSchema) })
1422
1438
  )
1423
1439
  });
1424
- var findResultSchema = z3.object({
1440
+ var findResultSchema = z3.looseObject({
1425
1441
  ranking: z3.enum(["semantic", "lexical"]),
1426
- runtime: runtimeSchema.nullable(),
1442
+ runtime: runtimeSchema.nullable().optional(),
1427
1443
  matches: z3.array(
1428
- z3.object({
1444
+ z3.looseObject({
1429
1445
  name: z3.string(),
1430
1446
  package: z3.string(),
1431
1447
  description: z3.string(),
@@ -1435,16 +1451,12 @@ var findResultSchema = z3.object({
1435
1451
  })
1436
1452
  )
1437
1453
  });
1438
- var skillFileSchema = z3.object({
1454
+ var skillFileSchema = z3.looseObject({
1439
1455
  path: z3.string(),
1440
1456
  bytes: z3.number().int(),
1441
1457
  sha256: z3.string()
1442
1458
  });
1443
- var metadataLeafSchema = z3.union([
1444
- z3.string(),
1445
- z3.array(z3.string()).readonly()
1446
- ]);
1447
- var describeResponseSchema = z3.object({
1459
+ var describeResponseSchema = z3.looseObject({
1448
1460
  name: z3.string(),
1449
1461
  kind,
1450
1462
  package: z3.string(),
@@ -1452,16 +1464,13 @@ var describeResponseSchema = z3.object({
1452
1464
  tier: z3.string().optional(),
1453
1465
  metadata: z3.record(
1454
1466
  z3.string(),
1455
- z3.union([
1456
- metadataLeafSchema,
1457
- z3.record(z3.string(), metadataLeafSchema).readonly()
1458
- ])
1467
+ z3.union([z3.string(), z3.array(z3.string()).readonly()])
1459
1468
  ),
1460
1469
  frontmatter: z3.string(),
1461
1470
  files: z3.array(skillFileSchema),
1462
1471
  filesTruncated: z3.boolean()
1463
1472
  });
1464
- var bundleResponseSchema = z3.object({
1473
+ var bundleResponseSchema = z3.looseObject({
1465
1474
  name: z3.string(),
1466
1475
  truncated: z3.boolean(),
1467
1476
  files: z3.array(
@@ -1521,7 +1530,7 @@ var kindInput = z4.enum(["skill", "agent", "hook", "mcp", "any"]).optional().des
1521
1530
  );
1522
1531
  var tierInput = z4.enum(["open", "free", "paid", "internal"]).optional();
1523
1532
  var runtimeInput = runtimeSchema.optional().describe(
1524
- "A runtime (claude-code, codex-cli, gemini-cli, grok-cli, antigravity). Skills whose metadata.verified-runtimes lists it are marked verified and listed first; the rest are kept. Without it, the runtime of the connected client is used for the same ordering when it is recognised."
1533
+ "A runtime (claude-code, codex-cli, gemini-cli, grok-cli, antigravity). Skills whose metadata.verified-runtimes lists it are marked verified and listed first; the rest are kept. Without it, the order is the same as without verification data."
1525
1534
  );
1526
1535
  var verifiedOnlyInput = z4.boolean().optional().describe(
1527
1536
  "Drop skills that are not verified: on the given runtime, or on any runtime when none is given. The detected client runtime never filters."
@@ -1641,7 +1650,7 @@ function registerDescribeTool(server, tools) {
1641
1650
  "skill_describe",
1642
1651
  {
1643
1652
  ...readOnlyTool("Describe a skill"),
1644
- description: "One skill's frontmatter, metadata (tier, level, requirements as a nested requires map, verified-runtimes, licence, approval), and the files it carries with sizes and sha256, without any body.",
1653
+ description: "One skill's frontmatter, metadata (tier, level, requirements as requires.<name> entries, verified-runtimes, licence, approval), and the files it carries with sizes and sha256, without any body.",
1645
1654
  inputSchema: z8.object({ name: skillNameInput }),
1646
1655
  outputSchema: describeResponseSchema
1647
1656
  },
@@ -1718,7 +1727,7 @@ function registerReadTool(server, tools) {
1718
1727
 
1719
1728
  // src/mcp.ts
1720
1729
  var SERVER_NAME = "pmcp";
1721
- var SERVER_VERSION = "0.9.0";
1730
+ var SERVER_VERSION = "0.9.2";
1722
1731
  function registerSkillTools(server, tools) {
1723
1732
  registerCatalogTool(server, tools);
1724
1733
  registerFindTool(server, tools);
@@ -1793,4 +1802,4 @@ export {
1793
1802
  registerSkillTools,
1794
1803
  createSkillServer
1795
1804
  };
1796
- //# sourceMappingURL=chunk-PXNRZXL6.js.map
1805
+ //# sourceMappingURL=chunk-A5NOHVHN.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  normaliseIntent
3
- } from "./chunk-PXNRZXL6.js";
3
+ } from "./chunk-A5NOHVHN.js";
4
4
 
5
5
  // src/cache.ts
6
6
  async function openDatabase(path) {
@@ -131,4 +131,4 @@ export {
131
131
  DEFAULT_INTENT_CACHE_LIMIT,
132
132
  openIntentCache
133
133
  };
134
- //# sourceMappingURL=chunk-AKPSLZRJ.js.map
134
+ //# sourceMappingURL=chunk-CMZ7OTQD.js.map
@@ -2,7 +2,7 @@ import {
2
2
  frontmatterObject,
3
3
  readCatalog,
4
4
  specProblems
5
- } from "./chunk-PXNRZXL6.js";
5
+ } from "./chunk-A5NOHVHN.js";
6
6
 
7
7
  // src/config.ts
8
8
  import { existsSync, readFileSync } from "fs";
@@ -1139,4 +1139,4 @@ export {
1139
1139
  validateSkillDir,
1140
1140
  validateCatalog
1141
1141
  };
1142
- //# sourceMappingURL=chunk-PWEAKJZ3.js.map
1142
+ //# sourceMappingURL=chunk-D3OZVMHN.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createSkillServer
3
- } from "./chunk-PXNRZXL6.js";
3
+ } from "./chunk-A5NOHVHN.js";
4
4
 
5
5
  // src/stdio.ts
6
6
  import { serveStdio } from "@modelcontextprotocol/server/stdio";
@@ -38,4 +38,4 @@ export {
38
38
  serve,
39
39
  main
40
40
  };
41
- //# sourceMappingURL=chunk-Y7UX36AC.js.map
41
+ //# sourceMappingURL=chunk-EIHMCKY5.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  openDatabase
3
- } from "./chunk-AKPSLZRJ.js";
3
+ } from "./chunk-CMZ7OTQD.js";
4
4
 
5
5
  // src/embed.ts
6
6
  var DEFAULT_MODEL_ID = "Xenova/multilingual-e5-small";
@@ -157,4 +157,4 @@ export {
157
157
  encodeEntries,
158
158
  openEntryVectors
159
159
  };
160
- //# sourceMappingURL=chunk-RYOLBTSW.js.map
160
+ //# sourceMappingURL=chunk-KYW3VP3L.js.map
package/dist/cli.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  loadEmbedder,
4
4
  openEntryVectors
5
- } from "./chunk-RYOLBTSW.js";
5
+ } from "./chunk-KYW3VP3L.js";
6
6
  import {
7
7
  ConfigError,
8
8
  ProjectError,
@@ -17,15 +17,15 @@ import {
17
17
  splitFrontmatter,
18
18
  validateCatalog,
19
19
  validateSkillDir
20
- } from "./chunk-PWEAKJZ3.js";
21
- import "./chunk-AKPSLZRJ.js";
20
+ } from "./chunk-D3OZVMHN.js";
21
+ import "./chunk-CMZ7OTQD.js";
22
22
  import {
23
23
  serve
24
- } from "./chunk-Y7UX36AC.js";
24
+ } from "./chunk-EIHMCKY5.js";
25
25
  import {
26
26
  kindOf,
27
27
  readCatalog
28
- } from "./chunk-PXNRZXL6.js";
28
+ } from "./chunk-A5NOHVHN.js";
29
29
 
30
30
  // src/cli/command.ts
31
31
  var ArgumentError = class extends Error {
@@ -2347,7 +2347,7 @@ function dispatch(argv, options = {}) {
2347
2347
  }
2348
2348
  return run(command, rest, { ui, env, cwd });
2349
2349
  }
2350
- var VERSION = "0.9.0";
2350
+ var VERSION = "0.9.2";
2351
2351
  async function run(command, argv, context) {
2352
2352
  try {
2353
2353
  return await command.run({
package/dist/http.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { S as SkillEntry } from './catalog-BU5VLLyd.js';
2
- import { E as Embedder, S as SkillServerOptions } from './server-BBZDjzWZ.js';
2
+ import { E as Embedder, S as SkillServerOptions } from './server-C9eO6LMI.js';
3
3
  import 'zod';
4
4
 
5
5
  /**
package/dist/http.js CHANGED
@@ -2,12 +2,12 @@ import {
2
2
  DEFAULT_MODEL_ID,
3
3
  encodeEntries,
4
4
  loadEmbedder
5
- } from "./chunk-RYOLBTSW.js";
6
- import "./chunk-AKPSLZRJ.js";
5
+ } from "./chunk-KYW3VP3L.js";
6
+ import "./chunk-CMZ7OTQD.js";
7
7
  import {
8
8
  createSkillServer,
9
9
  readCatalog
10
- } from "./chunk-PXNRZXL6.js";
10
+ } from "./chunk-A5NOHVHN.js";
11
11
 
12
12
  // src/http.ts
13
13
  import {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { I as IntentCache, S as SkillServerOptions, a as SkillTools } from './server-BBZDjzWZ.js';
2
- export { B as BundleFile, C as CATALOG_PAGE_MAX, b as CATALOG_PAGE_SIZE, c as CallResponse, d as CatalogItem, e as CatalogResponse, f as Classified, D as DEFAULT_FIND_LIMIT, g as DESCRIBE_FILE_LIMIT, E as Embedder, F as FileKind, h as FindOptions, i as FindResult, j as IntentCacheStats, K as KindFilter, M as Match, R as READ_BUDGET_BYTES, k as RUNTIMES, l as Ranking, m as ReadResult, n as Runtime, o as SkillBundle, p as SkillFile, q as SkillFileContent, r as SkillFileListing, s as SkillFilters, t as bundleResponseSchema, u as bundleSkill, v as catalogResponseSchema, w as classify, x as cosine, y as createSkillTools, z as describeResponseSchema, A as detectRuntime, G as find, H as findResultSchema, J as isUtf8Text, L as lexicalScore, N as listSkillFiles, O as mimeOf, P as normaliseIntent, Q as readSkillFile, T as runtimeOfClient, U as verifiedRuntimesOf } from './server-BBZDjzWZ.js';
1
+ import { I as IntentCache, S as SkillServerOptions, a as SkillTools } from './server-C9eO6LMI.js';
2
+ export { B as BundleFile, C as CATALOG_PAGE_MAX, b as CATALOG_PAGE_SIZE, c as CallResponse, d as CatalogItem, e as CatalogResponse, f as Classified, D as DEFAULT_FIND_LIMIT, g as DESCRIBE_FILE_LIMIT, E as Embedder, F as FileKind, h as FindOptions, i as FindResult, j as IntentCacheStats, K as KindFilter, M as Match, R as READ_BUDGET_BYTES, k as RUNTIMES, l as Ranking, m as ReadResult, n as Runtime, o as SkillBundle, p as SkillFile, q as SkillFileContent, r as SkillFileListing, s as SkillFilters, t as bundleResponseSchema, u as bundleSkill, v as catalogResponseSchema, w as classify, x as cosine, y as createSkillTools, z as describeResponseSchema, A as detectRuntime, G as find, H as findResultSchema, J as isUtf8Text, L as lexicalScore, N as listSkillFiles, O as mimeOf, P as normaliseIntent, Q as readSkillFile, T as runtimeOfClient, U as verifiedRuntimesOf } from './server-C9eO6LMI.js';
3
3
  import { S as SkillEntry, M as MetadataValue, C as CatalogOptions } from './catalog-BU5VLLyd.js';
4
4
  export { a as ASSET_KINDS, A as AssetKind, b as COMPATIBILITY_MAX, D as DESCRIPTION_MAX, c as MAX_SKILL_DEPTH, d as MetadataLeaf, N as NAME_MAX, e as SKIPPED_DIRS, f as displayPath, k as kindOf, g as parseSkillFrontmatter, r as readBody, h as readCatalog, i as readFrontmatter, s as specProblems, w as withoutBody } from './catalog-BU5VLLyd.js';
5
5
  import { McpServer } from '@modelcontextprotocol/server';
@@ -285,7 +285,7 @@ declare function resolveSkillFileUri(uri: string, entries: readonly SkillEntry[]
285
285
 
286
286
  /** Reported to the host on connect. */
287
287
  declare const SERVER_NAME = "pmcp";
288
- declare const SERVER_VERSION = "0.9.0";
288
+ declare const SERVER_VERSION = "0.9.2";
289
289
  /**
290
290
  * Registers the skill_* tools on a server.
291
291
  *
package/dist/index.js CHANGED
@@ -14,11 +14,11 @@ import {
14
14
  readSpec,
15
15
  validateCatalog,
16
16
  validateSkillDir
17
- } from "./chunk-PWEAKJZ3.js";
17
+ } from "./chunk-D3OZVMHN.js";
18
18
  import {
19
19
  DEFAULT_INTENT_CACHE_LIMIT,
20
20
  openIntentCache
21
- } from "./chunk-AKPSLZRJ.js";
21
+ } from "./chunk-CMZ7OTQD.js";
22
22
  import {
23
23
  ASSET_KINDS,
24
24
  CATALOG_PAGE_MAX,
@@ -74,7 +74,7 @@ import {
74
74
  specProblems,
75
75
  verifiedRuntimesOf,
76
76
  withoutBody
77
- } from "./chunk-PXNRZXL6.js";
77
+ } from "./chunk-A5NOHVHN.js";
78
78
  export {
79
79
  ASSET_KINDS,
80
80
  CATALOG_PAGE_MAX,
@@ -233,7 +233,7 @@ declare const catalogItemSchema: z.ZodObject<{
233
233
  antigravity: "antigravity";
234
234
  }>>>;
235
235
  verified: z.ZodOptional<z.ZodBoolean>;
236
- }, z.core.$strip>;
236
+ }, z.core.$loose>;
237
237
  declare const catalogResponseSchema: z.ZodObject<{
238
238
  count: z.ZodNumber;
239
239
  page: z.ZodNumber;
@@ -259,21 +259,21 @@ declare const catalogResponseSchema: z.ZodObject<{
259
259
  antigravity: "antigravity";
260
260
  }>>>;
261
261
  verified: z.ZodOptional<z.ZodBoolean>;
262
- }, z.core.$strip>>;
263
- }, z.core.$strip>>;
264
- }, z.core.$strip>;
262
+ }, z.core.$loose>>;
263
+ }, z.core.$loose>>;
264
+ }, z.core.$loose>;
265
265
  declare const findResultSchema: z.ZodObject<{
266
266
  ranking: z.ZodEnum<{
267
267
  semantic: "semantic";
268
268
  lexical: "lexical";
269
269
  }>;
270
- runtime: z.ZodNullable<z.ZodEnum<{
270
+ runtime: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
271
271
  "claude-code": "claude-code";
272
272
  "codex-cli": "codex-cli";
273
273
  "gemini-cli": "gemini-cli";
274
274
  "grok-cli": "grok-cli";
275
275
  antigravity: "antigravity";
276
- }>>;
276
+ }>>>;
277
277
  matches: z.ZodArray<z.ZodObject<{
278
278
  name: z.ZodString;
279
279
  package: z.ZodString;
@@ -287,8 +287,8 @@ declare const findResultSchema: z.ZodObject<{
287
287
  antigravity: "antigravity";
288
288
  }>>>;
289
289
  verified: z.ZodOptional<z.ZodBoolean>;
290
- }, z.core.$strip>>;
291
- }, z.core.$strip>;
290
+ }, z.core.$loose>>;
291
+ }, z.core.$loose>;
292
292
  declare const describeResponseSchema: z.ZodObject<{
293
293
  name: z.ZodString;
294
294
  kind: z.ZodEnum<{
@@ -300,15 +300,15 @@ declare const describeResponseSchema: z.ZodObject<{
300
300
  package: z.ZodString;
301
301
  description: z.ZodString;
302
302
  tier: z.ZodOptional<z.ZodString>;
303
- metadata: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString>>]>, z.ZodReadonly<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString>>]>>>]>>;
303
+ metadata: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString>>]>>;
304
304
  frontmatter: z.ZodString;
305
305
  files: z.ZodArray<z.ZodObject<{
306
306
  path: z.ZodString;
307
307
  bytes: z.ZodNumber;
308
308
  sha256: z.ZodString;
309
- }, z.core.$strip>>;
309
+ }, z.core.$loose>>;
310
310
  filesTruncated: z.ZodBoolean;
311
- }, z.core.$strip>;
311
+ }, z.core.$loose>;
312
312
  declare const bundleResponseSchema: z.ZodObject<{
313
313
  name: z.ZodString;
314
314
  truncated: z.ZodBoolean;
@@ -318,8 +318,8 @@ declare const bundleResponseSchema: z.ZodObject<{
318
318
  sha256: z.ZodString;
319
319
  uri: z.ZodString;
320
320
  mimeType: z.ZodString;
321
- }, z.core.$strip>>;
322
- }, z.core.$strip>;
321
+ }, z.core.$loose>>;
322
+ }, z.core.$loose>;
323
323
  type CatalogItem = z.infer<typeof catalogItemSchema>;
324
324
  type CatalogResponse = z.infer<typeof catalogResponseSchema>;
325
325
  type FindResponse = z.infer<typeof findResultSchema>;
package/dist/stdio.js CHANGED
@@ -3,8 +3,8 @@ import {
3
3
  main,
4
4
  resolveRoots,
5
5
  serve
6
- } from "./chunk-Y7UX36AC.js";
7
- import "./chunk-PXNRZXL6.js";
6
+ } from "./chunk-EIHMCKY5.js";
7
+ import "./chunk-A5NOHVHN.js";
8
8
  export {
9
9
  main,
10
10
  resolveRoots,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modootoday/pmcp",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "license": "Elastic-2.0",
5
5
  "author": "modootoday",
6
6
  "description": "An MCP server that finds the skills your installed packages already ship. Reads SKILL.md out of node_modules by shape rather than by path, so it sees the skills, .agent, .claude, .gemini and .codex conventions alike, and keeps session startup flat as the number of installed skills grows.",