@mcp-s/connectors 0.0.20260929124921 → 0.0.20261003181632

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
@@ -16,7 +16,8 @@ never contain secrets.
16
16
 
17
17
  ```
18
18
  src/schema/ # zod 4 schema; all types are inferred from it
19
- src/connectors/ # one folder per connector: <name>.connector.ts (+ .tools.ts)
19
+ src/connectors/api/ # Willow-authored tools against a vendor API: <name>/<name>.connector.ts (+ .tools.ts)
20
+ src/connectors/mcp/ # proxied MCP servers, tools discovered from the server: <name>/<name>.connector.ts
20
21
  src/connectors/index.ts # the list of published connectors
21
22
  scripts/build.ts # validates every connector and writes dist/public
22
23
  test/ # schema validation + 1:1 parity with db-service's built-ins
@@ -34,8 +35,9 @@ The same files ship in the npm package under `dist/public`, readable with
34
35
 
35
36
  ## Adding or changing a connector
36
37
 
37
- 1. Add `src/connectors/<name>/<name>.connector.ts` exporting a `CatalogConnector`
38
- (and `.tools.ts` if it has them).
38
+ 1. Add `src/connectors/<kind>/<name>/<name>.connector.ts` exporting a
39
+ `CatalogConnector` (and `.tools.ts` if it has them), where `<kind>` is `api`
40
+ or `mcp`.
39
41
  2. Register it in `src/connectors/index.ts`.
40
42
  3. `npm test && npm run build`.
41
43
  4. Open a PR. Once merged, it reaches every org on the `unified-connectors` beta
@@ -50,6 +52,10 @@ Rules the build enforces:
50
52
  that is in use.
51
53
  - **Exactly one of `definition.api` and `definition.mcp`.** That choice is the
52
54
  connector's kind; there is no separate field for it.
55
+ - **Folder matches kind.** A connector with `definition.api` lives under `api/`,
56
+ one with `definition.mcp` under `mcp/`, and every connector on disk is
57
+ registered in `index.ts`. Who publishes an MCP server is the `official`
58
+ label, not a folder. Moving a connector never changes its `id`.
53
59
 
54
60
  ## Release flow
55
61
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": 1,
3
- "generated_at": "2026-09-29T12:49:21.925Z",
3
+ "generated_at": "2026-10-03T18:16:32.048Z",
4
4
  "connectors": [
5
5
  {
6
6
  "id": "github",
@@ -331,7 +331,7 @@ export declare const catalogConnector: z.ZodObject<{
331
331
  active: "active";
332
332
  "super-admin": "super-admin";
333
333
  }>;
334
- applications: z.ZodArray<z.ZodString>;
334
+ applications: z.ZodOptional<z.ZodArray<z.ZodString>>;
335
335
  definition: z.ZodObject<{
336
336
  display: z.ZodObject<{
337
337
  name: z.ZodString;
@@ -658,7 +658,7 @@ export declare const catalogIndexEntry: z.ZodObject<{
658
658
  description: z.ZodOptional<z.ZodString>;
659
659
  icon: z.ZodOptional<z.ZodString>;
660
660
  category: z.ZodEnum<typeof import("./enums.js").ConnectorCategory>;
661
- applications: z.ZodArray<z.ZodString>;
661
+ applications: z.ZodOptional<z.ZodArray<z.ZodString>>;
662
662
  hash: z.ZodString;
663
663
  }, z.core.$loose>;
664
664
  export type CatalogIndexEntry = z.infer<typeof catalogIndexEntry>;
@@ -681,7 +681,7 @@ export declare const catalogIndex: z.ZodObject<{
681
681
  description: z.ZodOptional<z.ZodString>;
682
682
  icon: z.ZodOptional<z.ZodString>;
683
683
  category: z.ZodEnum<typeof import("./enums.js").ConnectorCategory>;
684
- applications: z.ZodArray<z.ZodString>;
684
+ applications: z.ZodOptional<z.ZodArray<z.ZodString>>;
685
685
  hash: z.ZodString;
686
686
  }, z.core.$loose>>;
687
687
  }, z.core.$loose>;
@@ -81,8 +81,8 @@ export const catalogConnector = obj({
81
81
  */
82
82
  id: z.string().regex(/^[a-z0-9][a-z0-9-]*$/),
83
83
  status: catalogConnectorStatus,
84
- /** Products this connector covers, e.g. ["jira", "confluence"]. */
85
- applications: z.array(z.string()),
84
+ /** Products this connector covers, e.g. ["jira", "confluence"]. Absent when the connector is not grouped with a product. */
85
+ applications: z.array(z.string()).optional(),
86
86
  definition: catalogConnectorDefinition,
87
87
  });
88
88
  export const connectorKind = (connector) => (connector.definition.mcp ? "mcp" : "api");
@@ -95,7 +95,7 @@ export const catalogIndexEntry = obj({
95
95
  description: z.string().optional(),
96
96
  icon: z.string().optional(),
97
97
  category: connectorCategory,
98
- applications: z.array(z.string()),
98
+ applications: z.array(z.string()).optional(),
99
99
  /** Content hash of the published definition file. */
100
100
  hash: z.string(),
101
101
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-s/connectors",
3
- "version": "0.0.20260929124921",
3
+ "version": "0.0.20261003181632",
4
4
  "description": "Willow connector catalog: one schema for every connector, plus the published catalog JSON",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,6 +17,7 @@
17
17
  ],
18
18
  "scripts": {
19
19
  "build": "rm -rf dist && tsc -p tsconfig.build.json && tsx scripts/build.ts",
20
+ "dev": "tsx scripts/build.ts && (npx serve dist/public -p 8787 & tsx watch scripts/build.ts & wait)",
20
21
  "typecheck": "tsc --noEmit",
21
22
  "test": "vitest run",
22
23
  "fixtures:parity": "tsx scripts/generate-parity-fixtures.ts"