@nyuchi/mzizi-mcp 0.12.0 → 0.14.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.
Files changed (45) hide show
  1. package/README.md +112 -7
  2. package/dist/docs-federation.d.ts +1 -1
  3. package/dist/docs-federation.d.ts.map +1 -1
  4. package/dist/docs-federation.js +1 -0
  5. package/dist/docs-federation.js.map +1 -1
  6. package/dist/fundi-client.d.ts +6 -0
  7. package/dist/fundi-client.d.ts.map +1 -1
  8. package/dist/fundi-client.js +14 -3
  9. package/dist/fundi-client.js.map +1 -1
  10. package/dist/generated/registry-pin.d.ts +1 -1
  11. package/dist/generated/registry-pin.js +1 -1
  12. package/dist/generated/registry.d.ts +2 -2
  13. package/dist/generated/registry.d.ts.map +1 -1
  14. package/dist/generated/registry.js +254 -198
  15. package/dist/generated/registry.js.map +1 -1
  16. package/dist/generated/skills.d.ts +15 -1
  17. package/dist/generated/skills.d.ts.map +1 -1
  18. package/dist/generated/skills.js +227 -17
  19. package/dist/generated/skills.js.map +1 -1
  20. package/dist/http.d.ts +22 -2
  21. package/dist/http.d.ts.map +1 -1
  22. package/dist/http.js +116 -19
  23. package/dist/http.js.map +1 -1
  24. package/dist/limits.d.ts +32 -0
  25. package/dist/limits.d.ts.map +1 -0
  26. package/dist/limits.js +44 -0
  27. package/dist/limits.js.map +1 -0
  28. package/dist/registry.d.ts +1 -1
  29. package/dist/registry.d.ts.map +1 -1
  30. package/dist/registry.js +22 -1
  31. package/dist/registry.js.map +1 -1
  32. package/dist/server.d.ts +37 -2
  33. package/dist/server.d.ts.map +1 -1
  34. package/dist/server.js +96 -3
  35. package/dist/server.js.map +1 -1
  36. package/dist/stdio.js +5 -4
  37. package/dist/stdio.js.map +1 -1
  38. package/dist/tools.d.ts +21 -1
  39. package/dist/tools.d.ts.map +1 -1
  40. package/dist/tools.js +336 -86
  41. package/dist/tools.js.map +1 -1
  42. package/dist/worker.d.ts.map +1 -1
  43. package/dist/worker.js +3 -0
  44. package/dist/worker.js.map +1 -1
  45. package/package.json +18 -17
package/dist/server.js CHANGED
@@ -11,13 +11,15 @@
11
11
  * carrying its `replaces` list in `TOOL_COVERAGE`, and the `docs_*` tools mirror
12
12
  * whatever the docs server lists.
13
13
  */
14
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
14
+ import { McpServer, ResourceTemplate } from "@modelcontextprotocol/server";
15
+ import { BUNDLED_SKILLS, SKILLS_VERSION } from "./generated/skills.js";
16
+ import { skillFileUri, skillUri } from "./tools.js";
15
17
  import { REGISTRY_PIN as REGISTRY_PIN_INFO } from "./generated/registry-pin.js";
16
18
  import { registerDocsTools, DOCS_MCP_URL } from "./docs-federation.js";
17
19
  import { registerMziziTools, TOOL_COVERAGE, TOOL_PREFIX } from "./tools.js";
18
20
  import { jsonContent } from "./tool-result.js";
19
21
  import { accessFor, accessSummary } from "./access.js";
20
- export const MZIZI_MCP_VERSION = "0.12.0";
22
+ export const MZIZI_MCP_VERSION = "0.14.0";
21
23
  /**
22
24
  * What this server exposes, computed from what was actually registered.
23
25
  *
@@ -37,6 +39,21 @@ export function describeTools(registered) {
37
39
  },
38
40
  note: "Registry data and skills are files bundled into this build at a pinned commit. Components are Rust first: each Mzizi Roots (Rust) implementation, with its crate and contract, comes from the registry's /v1/rs route and leads mzizi_get_component; the React build follows. docs_* tools are forwarded to the docs.mzizi.dev MCP. This server holds no database credential.",
39
41
  access: accessSummary(registered),
42
+ // The skill set, read from the bundle this build carries: the same list
43
+ // mzizi_get_skills, the skill resources and the skill prompts serve.
44
+ skills: {
45
+ version: SKILLS_VERSION,
46
+ tool: `${TOOL_PREFIX}get_skills`,
47
+ resources: "mzizi://skills/{name} (SKILL.md) and mzizi://skills/{name}/{path} (the files it ships)",
48
+ prompts: "skill-{name}",
49
+ list: BUNDLED_SKILLS.map((s) => ({
50
+ name: s.name,
51
+ category: s.category,
52
+ uri: skillUri(s.name),
53
+ prompt: `skill-${s.name}`,
54
+ files: s.files.map((f) => f.path),
55
+ })),
56
+ },
40
57
  tools: registered.map((name) => ({
41
58
  name: name.startsWith("docs_") ? name : `${TOOL_PREFIX}${name}`,
42
59
  access: accessFor(name),
@@ -66,6 +83,80 @@ export async function mziziToolCatalogue(opts = {}) {
66
83
  // tool not declared in `tools.ts`.
67
84
  return describeTools([...registered, "mcp_describe", ...docs]);
68
85
  }
86
+ /**
87
+ * The skills as MCP resources and prompts, beside `mzizi_get_skills`, so a
88
+ * client that never calls tools (or never installs the Claude Code plugin)
89
+ * gets the same skills: each SKILL.md as `mzizi://skills/<name>`, each file a
90
+ * skill ships as `mzizi://skills/<name>/<path>`, and each skill as the prompt
91
+ * `skill-<name>`, whose message is the skill's full text. All three read
92
+ * BUNDLED_SKILLS, so they cannot disagree with the tool.
93
+ */
94
+ export function registerSkillSurfaces(server) {
95
+ server.registerResource("mzizi-skill", new ResourceTemplate("mzizi://skills/{name}", {
96
+ list: async () => ({
97
+ resources: BUNDLED_SKILLS.map((s) => ({
98
+ uri: skillUri(s.name),
99
+ name: s.name,
100
+ title: `Skill: ${s.name}`,
101
+ description: s.description,
102
+ mimeType: "text/markdown",
103
+ })),
104
+ }),
105
+ }), {
106
+ title: "Mzizi agent skill",
107
+ description: `A Mzizi agent skill's SKILL.md body (@nyuchi/mzizi-skills ${SKILLS_VERSION}).`,
108
+ mimeType: "text/markdown",
109
+ }, async (uri, { name }) => {
110
+ const skill = BUNDLED_SKILLS.find((s) => s.name === String(name));
111
+ if (!skill)
112
+ throw new Error(`No skill named "${String(name)}".`);
113
+ return { contents: [{ uri: uri.href, mimeType: "text/markdown", text: skill.body_mdx }] };
114
+ });
115
+ server.registerResource("mzizi-skill-file", new ResourceTemplate("mzizi://skills/{name}/{+path}", {
116
+ list: async () => ({
117
+ resources: BUNDLED_SKILLS.flatMap((s) => s.files.map((f) => ({
118
+ uri: skillFileUri(s.name, f.path),
119
+ name: `${s.name}/${f.path}`,
120
+ title: `${s.name}: ${f.path}`,
121
+ mimeType: f.mimeType,
122
+ }))),
123
+ }),
124
+ }), {
125
+ title: "A file a Mzizi skill ships",
126
+ description: "A script, stylesheet, data file or image shipped beside a skill's SKILL.md, byte for byte (images as base64 blobs).",
127
+ }, async (uri, { name, path }) => {
128
+ const skill = BUNDLED_SKILLS.find((s) => s.name === String(name));
129
+ const file = skill?.files.find((f) => f.path === String(path));
130
+ if (!skill || !file)
131
+ throw new Error(`No file "${String(path)}" in skill "${String(name)}".`);
132
+ // A binary file (PNG, ICO) is a blob resource, base64 as MCP specifies.
133
+ return {
134
+ contents: [
135
+ file.encoding === "base64"
136
+ ? { uri: uri.href, mimeType: file.mimeType, blob: file.content }
137
+ : { uri: uri.href, mimeType: file.mimeType, text: file.content },
138
+ ],
139
+ };
140
+ });
141
+ for (const skill of BUNDLED_SKILLS) {
142
+ server.registerPrompt(`skill-${skill.name}`, { title: `Load the ${skill.name} skill`, description: skill.description }, async () => ({
143
+ description: skill.description,
144
+ messages: [
145
+ {
146
+ role: "user",
147
+ content: {
148
+ type: "text",
149
+ text: `Follow the Mzizi skill "${skill.name}" (@nyuchi/mzizi-skills ${SKILLS_VERSION}) for this task.` +
150
+ (skill.files.length
151
+ ? ` It ships ${skill.files.map((f) => f.path).join(", ")}, readable as ${skillFileUri(skill.name, "<path>")} or with mzizi_get_skills name=${skill.name} file=<path>.`
152
+ : "") +
153
+ `\n\n${skill.body_mdx}`,
154
+ },
155
+ },
156
+ ],
157
+ }));
158
+ }
159
+ }
69
160
  export async function createMziziMcpServer(opts = {}) {
70
161
  const server = new McpServer({
71
162
  name: "mzizi-mcp",
@@ -75,6 +166,7 @@ export async function createMziziMcpServer(opts = {}) {
75
166
  capabilities: {
76
167
  tools: { listChanged: true },
77
168
  resources: { listChanged: true },
169
+ prompts: { listChanged: true },
78
170
  },
79
171
  instructions: "Access to the Mzizi design system: components, design tokens, brand, the DNA-helix architecture, Ubuntu doctrine and conventions, agent skills and releases (the mzizi_* tools, served from files bundled at a pinned registry commit), plus the documentation site (the docs_* tools, forwarded to docs.mzizi.dev). Start with mzizi_search if you do not know the name of what you want; mzizi_get_component returns a component in full in one read, Rust first: where a Mzizi Roots (Rust) implementation exists it leads with the crate, the cargo add line, the contract and the .rs source, and gives the React build second (deprioritised); mzizi_list_components and mzizi_search mark those components with rustCrate; mzizi_get_architecture returns the helix and takes an uncapped node number; docs_search_mzizi searches the documentation. Every tool is free without an account except mzizi_fundi and mzizi_report_issue, which act as your Mzizi console user and need sign-in; called without it they say how to sign in.",
80
172
  });
@@ -100,6 +192,7 @@ export async function createMziziMcpServer(opts = {}) {
100
192
  },
101
193
  ],
102
194
  }));
195
+ registerSkillSurfaces(server);
103
196
  // Registered here rather than in `tools.ts` because it closes over `describe`,
104
197
  // but it still has to land in `registered` — otherwise every catalogue surface
105
198
  // reports one tool fewer than the server actually answers to.
@@ -107,7 +200,7 @@ export async function createMziziMcpServer(opts = {}) {
107
200
  server.registerTool(`${TOOL_PREFIX}mcp_describe`, {
108
201
  title: "Describe this server",
109
202
  description: "What this MCP server exposes: its tools, which are free and which need sign-in, what each replaces, and where its data comes from.",
110
- annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
203
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
111
204
  }, async () => jsonContent(describe()));
112
205
  // Last, so the describe tool and resource report them too: `describe` reads
113
206
  // `registered` when called, not when defined.
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/stdio.js CHANGED
@@ -11,12 +11,13 @@
11
11
  * `MZIZI_API_BASE` is gone: there is no registry API to point at any more. To
12
12
  * serve different registry content, build with a different pin.
13
13
  */
14
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
14
+ import { serveStdio } from "@modelcontextprotocol/server/stdio";
15
15
  import { createMziziMcpServer } from "./server.js";
16
+ // The SDK's stdio entry: it builds a server from the factory for the
17
+ // connection (and for any `server/discover` probe), so 2026-07-28 and
18
+ // 2025-era clients are both served. Nothing here writes to stdout.
16
19
  async function main() {
17
- const server = await createMziziMcpServer();
18
- const transport = new StdioServerTransport();
19
- await server.connect(transport);
20
+ serveStdio(() => createMziziMcpServer());
20
21
  }
21
22
  main().catch((err) => {
22
23
  const message = err instanceof Error ? (err.stack ?? err.message) : String(err);
package/dist/stdio.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAA;IAC3C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,IAAI,CAAC,CAAA;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,qEAAqE;AACrE,sEAAsE;AACtE,mEAAmE;AACnE,KAAK,UAAU,IAAI;IACjB,UAAU,CAAC,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAC1C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,IAAI,CAAC,CAAA;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
package/dist/tools.d.ts CHANGED
@@ -20,9 +20,29 @@
20
20
  * mzizi repo. Each tool's `replaces` list is recorded on the definition so coverage can
21
21
  * be checked mechanically rather than argued about.
22
22
  */
23
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
23
+ import type { McpServer } from "@modelcontextprotocol/server";
24
24
  import { type Registry } from "./registry.js";
25
25
  import type { FundiToolContext } from "./fundi-client.js";
26
+ import { type BundledSkill } from "./generated/skills.js";
27
+ /** The MCP resource URI of a skill's SKILL.md body, and of a file it ships. */
28
+ export declare const skillUri: (name: string) => string;
29
+ export declare const skillFileUri: (name: string, path: string) => string;
30
+ /** A skill as the tool returns it: the body in full, its files as a list (content on request). */
31
+ export declare function skillView(skill: BundledSkill): {
32
+ uri: string;
33
+ files: {
34
+ path: string;
35
+ mimeType: string;
36
+ bytes: number;
37
+ encoding: "base64" | "utf8";
38
+ uri: string;
39
+ }[];
40
+ name: string;
41
+ category: import("./generated/skills.js").SkillCategory;
42
+ description: string;
43
+ body_mdx: string;
44
+ source: string;
45
+ };
26
46
  export declare const TOOL_PREFIX = "mzizi_";
27
47
  /** What each tool absorbed, so coverage against the old 62 is checkable. */
28
48
  export declare const TOOL_COVERAGE: Record<string, readonly string[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAmC,KAAK,QAAQ,EAA8B,MAAM,eAAe,CAAC;AAC3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAW1D,eAAO,MAAM,WAAW,WAAW,CAAC;AAmEpC,4EAA4E;AAC5E,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CA0D3D,CAAC;AAoDF;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,KAAK,EAAE;QACV,IAAI,EAAE,UAAU,GAAG,eAAe,GAAG,OAAO,CAAC;QAC7C,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;QAClD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,mFAAmF;IACnF,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;;;OAIG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,eAAe,GACpB,MAAM,EAAE,CAimBV"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAmC,KAAK,QAAQ,EAA8B,MAAM,eAAe,CAAC;AAC3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAU1D,OAAO,EAAoD,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE5G,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,WAA6B,CAAC;AACnE,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,WAAqC,CAAC;AAE7F,kGAAkG;AAClG,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY;;;;;;;;;;;;;;EAO5C;AAED,eAAO,MAAM,WAAW,WAAW,CAAC;AAwEpC,4EAA4E;AAC5E,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CA0D3D,CAAC;AAkLF;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,KAAK,EAAE;QACV,IAAI,EAAE,UAAU,GAAG,eAAe,GAAG,OAAO,CAAC;QAC7C,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;QAClD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,mFAAmF;IACnF,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;;;OAIG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,eAAe,GACpB,MAAM,EAAE,CAiuBV"}