onlymcp 0.9.1 → 0.11.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 (76) hide show
  1. package/README.md +14 -11
  2. package/dist/apiClient.d.ts +129 -7
  3. package/dist/apiClient.js +98 -4
  4. package/dist/apiClient.js.map +1 -1
  5. package/dist/auth/deviceLogin.js +5 -1
  6. package/dist/auth/deviceLogin.js.map +1 -1
  7. package/dist/bin/cli.js +349 -131
  8. package/dist/bin/cli.js.map +1 -1
  9. package/dist/bin/mcp.js +16 -2
  10. package/dist/bin/mcp.js.map +1 -1
  11. package/dist/export/unpack.d.ts +33 -0
  12. package/dist/export/unpack.js +54 -0
  13. package/dist/export/unpack.js.map +1 -0
  14. package/dist/identity.d.ts +25 -0
  15. package/dist/identity.js +106 -0
  16. package/dist/identity.js.map +1 -0
  17. package/dist/import/collect.d.ts +14 -1
  18. package/dist/import/collect.js +25 -3
  19. package/dist/import/collect.js.map +1 -1
  20. package/dist/import/frontmatter.d.ts +31 -5
  21. package/dist/import/frontmatter.js +64 -22
  22. package/dist/import/frontmatter.js.map +1 -1
  23. package/dist/import/plan.d.ts +22 -1
  24. package/dist/import/plan.js +66 -19
  25. package/dist/import/plan.js.map +1 -1
  26. package/dist/import/prune.d.ts +46 -0
  27. package/dist/import/prune.js +61 -0
  28. package/dist/import/prune.js.map +1 -0
  29. package/dist/import/secrets.js +1 -1
  30. package/dist/import/secrets.js.map +1 -1
  31. package/dist/import/upload.js +17 -2
  32. package/dist/import/upload.js.map +1 -1
  33. package/dist/install.d.ts +67 -6
  34. package/dist/install.js +137 -59
  35. package/dist/install.js.map +1 -1
  36. package/dist/instructions.d.ts +3 -1
  37. package/dist/instructions.js +19 -2
  38. package/dist/instructions.js.map +1 -1
  39. package/dist/memorySync.d.ts +28 -0
  40. package/dist/memorySync.js +56 -0
  41. package/dist/memorySync.js.map +1 -0
  42. package/dist/paths.d.ts +12 -0
  43. package/dist/paths.js +34 -8
  44. package/dist/paths.js.map +1 -1
  45. package/dist/registry/caveats.d.ts +17 -0
  46. package/dist/registry/caveats.js +50 -0
  47. package/dist/registry/caveats.js.map +1 -0
  48. package/dist/registry/clients.d.ts +11 -0
  49. package/dist/registry/clients.js +327 -0
  50. package/dist/registry/clients.js.map +1 -0
  51. package/dist/registry/index.d.ts +4 -0
  52. package/dist/registry/index.js +5 -0
  53. package/dist/registry/index.js.map +1 -0
  54. package/dist/registry/servers.d.ts +50 -0
  55. package/dist/registry/servers.js +225 -0
  56. package/dist/registry/servers.js.map +1 -0
  57. package/dist/registry/types.d.ts +54 -0
  58. package/dist/registry/types.js +6 -0
  59. package/dist/registry/types.js.map +1 -0
  60. package/dist/stubs.d.ts +1 -0
  61. package/dist/stubs.js +85 -13
  62. package/dist/stubs.js.map +1 -1
  63. package/dist/tools/getAgentDefinition.js +5 -2
  64. package/dist/tools/getAgentDefinition.js.map +1 -1
  65. package/dist/tools/getSkill.js +1 -1
  66. package/dist/tools/getSkill.js.map +1 -1
  67. package/dist/tools/getSkillFile.js +3 -3
  68. package/dist/tools/getSkillFile.js.map +1 -1
  69. package/dist/tools/memoryGraph.d.ts +69 -0
  70. package/dist/tools/memoryGraph.js +128 -0
  71. package/dist/tools/memoryGraph.js.map +1 -0
  72. package/dist/tools/memoryRead.js +1 -1
  73. package/dist/tools/memoryRead.js.map +1 -1
  74. package/dist/tools/memoryWrite.js +1 -1
  75. package/dist/tools/memoryWrite.js.map +1 -1
  76. package/package.json +5 -4
@@ -0,0 +1,54 @@
1
+ export type ClientId = 'claude-code' | 'claude-app' | 'chatgpt' | 'codex' | 'gemini-cli' | 'gemini-app' | 'copilot-vscode' | 'cursor' | 'windsurf' | 'cline' | 'zed' | 'continue' | 'opencode';
2
+ export type ClientCategory = 'chat' | 'coding' | 'ide';
3
+ /** How this client can reach OnlyMCP. Order in the array is preference order. */
4
+ export type ConnectMethod = 'remote-oauth' | 'remote-header' | 'stdio';
5
+ export type SnippetLanguage = 'bash' | 'json' | 'toml' | 'yaml' | 'text';
6
+ export interface Snippet {
7
+ language: SnippetLanguage;
8
+ /** Never translated, never localised, never contains a placeholder path. */
9
+ text: string;
10
+ /** Where the snippet goes, if it is a file. */
11
+ path?: string;
12
+ }
13
+ /** Present only where `npx onlymcp install` can write the config itself. */
14
+ export interface ClientInstall {
15
+ configPath: string;
16
+ format: 'json' | 'toml';
17
+ stubDir: string | null;
18
+ }
19
+ export interface ClientRecord {
20
+ id: ClientId;
21
+ name: string;
22
+ category: ClientCategory;
23
+ /** simple-icons slug, or null when no brand mark may be used. */
24
+ brand: string | null;
25
+ methods: ConnectMethod[];
26
+ docsUrl: string;
27
+ /** ISO date on which the facts below were checked against docsUrl. */
28
+ verifiedOn: string;
29
+ /** Keys into CAVEATS (caveats.ts) for restrictions that must be stated; empty when there are none. */
30
+ caveats: string[];
31
+ install: ClientInstall | null;
32
+ /** Pure generator. Returns null when the remote-header method does not apply. */
33
+ remote(ctx: RemoteContext): Snippet[] | null;
34
+ }
35
+ export interface RemoteContext {
36
+ /** https://only-mcp.com/api/mcp */
37
+ endpoint: string;
38
+ /** Real token, or the literal placeholder 'omk_...'. */
39
+ token: string;
40
+ /** '~' on posix, '%USERPROFILE%' on windows. */
41
+ homePlaceholder?: string;
42
+ }
43
+ export interface ServerRecord {
44
+ id: string;
45
+ name: string;
46
+ /** simple-icons slug, or null when no brand mark may be used. */
47
+ brand: string | null;
48
+ url: string;
49
+ auth: 'oauth' | 'bearer' | 'oauth-or-bearer' | 'none';
50
+ docsUrl: string;
51
+ verifiedOn: string;
52
+ /** 'github' -> github__create_issue */
53
+ suggestedSlug: string;
54
+ }
@@ -0,0 +1,6 @@
1
+ // Generated by scripts/sync-registry.mjs. Do not edit.
2
+ // Types for the client and server registry. Zero runtime dependencies, no
3
+ // Node API, no DOM, no React: this package is imported by the API (server),
4
+ // the web app (browser) and, as a generated copy, the published CLI.
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,0EAA0E;AAC1E,4EAA4E;AAC5E,qEAAqE"}
package/dist/stubs.d.ts CHANGED
@@ -3,4 +3,5 @@ export declare function writeStubs(api: ApiClient, dir: string): Promise<{
3
3
  skills: number;
4
4
  agents: number;
5
5
  files: number;
6
+ kept: string[];
6
7
  }>;
package/dist/stubs.js CHANGED
@@ -1,5 +1,6 @@
1
- import { mkdir, writeFile } from 'node:fs/promises';
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
2
  import { dirname, join } from 'node:path';
3
+ import { headerField, headerOf } from './import/frontmatter.js';
3
4
  // Der Client prueft den Pfad, den der Server geschickt hat, unabhaengig davon,
4
5
  // dass der Server ihn beim Schreiben schon geprueft hat: hier wird aus einem
5
6
  // Pfad ein echter Schreibvorgang auf einer echten Platte.
@@ -10,7 +11,31 @@ import { isSafeSkillFilePath } from './skillFilePath.js';
10
11
  // entstehen sollte, darf trotzdem nie als Pfadsegment landen: ein falsch
11
12
  // konfiguriertes oder kompromittiertes ONLYMCP_API_URL soll niemals Dateien
12
13
  // ausserhalb von `dir` schreiben koennen, egal was der Server zurueckgibt.
13
- const SAFE_NAME = /^[a-z0-9]+(-[a-z0-9]+)*$/;
14
+ const SAFE_AGENT_NAME = /^[a-z0-9]+(-[a-z0-9]+)*$/;
15
+ // Skills duerfen seit Aufgabe 11 einen Namensraum tragen.
16
+ const SAFE_SKILL_NAME = /^[a-z0-9]+(-[a-z0-9]+)*(:[a-z0-9]+(-[a-z0-9]+)*)?$/;
17
+ /**
18
+ * Das Merkmal, an dem `collect` einen Stub wiedererkennt.
19
+ *
20
+ * Es ist der Grund, warum Stubs ueberhaupt in `~/.claude/skills` liegen
21
+ * duerfen: ohne dieses Feld laedt der naechste `onlymcp import` jeden
22
+ * Platzhalter als Skill hoch und ersetzt damit den echten Inhalt durch den
23
+ * Satz "ruf get_skill auf".
24
+ */
25
+ const MARKER = 'x-onlymcp-stub';
26
+ /**
27
+ * Der Ordnername eines Stubs.
28
+ *
29
+ * Ein Skill kann `superpowers:brainstorming` heissen, ein Ordner auf einer
30
+ * Windows-Platte kann keinen Doppelpunkt tragen, und der Scanner eines
31
+ * Clients erwartet ohnehin, dass `name:` zum Ordner passt. Der Stub heisst
32
+ * deshalb lokal `superpowers-brainstorming` und ruft im Text den echten
33
+ * Namen auf. `x-onlymcp-name` haelt fest, welcher das ist - daran erkennt
34
+ * der naechste Lauf, ob der Ordner ihm gehoert oder einem anderen Skill.
35
+ */
36
+ function stubDirName(name) {
37
+ return name.replace(/:/g, '-');
38
+ }
14
39
  // Frontmatter ist YAML, aber die Werte (description, model, jeder Tool-Name)
15
40
  // kommen ungeprueft vom Server. Ein Wert mit Zeilenumbruch koennte sonst aus
16
41
  // seiner eigenen Zeile ausbrechen und zusaetzliche Frontmatter-Felder
@@ -18,23 +43,61 @@ const SAFE_NAME = /^[a-z0-9]+(-[a-z0-9]+)*$/;
18
43
  // werden deshalb entfernt, nicht escaped: ein Skill-/Agent-Name oder eine
19
44
  // Beschreibung braucht nie einen Zeilenumbruch, um sinnvoll zu sein.
20
45
  function yamlSafe(value) {
21
- return value.replace(/[\r\n]+/g, ' ').trim();
46
+ return (value ?? '').replace(/[\r\n]+/g, ' ').trim();
47
+ }
48
+ /**
49
+ * Darf an diese Stelle geschrieben werden?
50
+ *
51
+ * Seit Aufgabe 12 liegen die Stubs in `~/.claude/skills` und `~/.codex/skills`
52
+ * - denselben Ordnern, aus denen importiert wird. Eine bestehende Datei, die
53
+ * kein Stub ist, ist die echte Arbeit eines Menschen und wird nicht
54
+ * ueberschrieben. Gehoert ein vorhandener Stub einem anderen Skill (zwei
55
+ * Plugins mit demselben Skill-Namen ergeben denselben Ordnernamen), bleibt
56
+ * ebenfalls stehen, was da ist: der erste hat ihn, der zweite wird gemeldet.
57
+ */
58
+ async function mayWrite(path, owner) {
59
+ let existing;
60
+ try {
61
+ existing = await readFile(path, 'utf8');
62
+ }
63
+ catch {
64
+ return true; // nicht da, also frei
65
+ }
66
+ const head = headerOf(existing);
67
+ if (head === null || headerField(head, MARKER) !== 'true')
68
+ return false;
69
+ const mine = headerField(head, 'x-onlymcp-name');
70
+ return mine === undefined || mine === owner;
22
71
  }
23
72
  export async function writeStubs(api, dir) {
24
73
  const [{ skills }, { agents }] = await Promise.all([api.listSkills(), api.listAgents()]);
25
74
  let files = 0;
75
+ let written = 0;
76
+ /** Was stehen geblieben ist, weil dort schon etwas Echtes lag. */
77
+ const kept = [];
26
78
  for (const s of skills) {
27
- if (!SAFE_NAME.test(s.name))
79
+ if (!SAFE_SKILL_NAME.test(s.name))
28
80
  continue;
29
- const target = join(dir, 'skills', s.name);
81
+ const target = join(dir, 'skills', stubDirName(s.name));
82
+ const skillMd = join(target, 'SKILL.md');
83
+ if (!(await mayWrite(skillMd, s.name))) {
84
+ // Auch die Begleitdateien bleiben aus: sie in einen fremden Skill-Ordner
85
+ // zu legen machte aus einer geschonten Datei einen halb ueberschriebenen
86
+ // Ordner.
87
+ kept.push(`skills/${stubDirName(s.name)}`);
88
+ continue;
89
+ }
30
90
  await mkdir(target, { recursive: true });
31
- await writeFile(join(target, 'SKILL.md'), `---
32
- name: ${s.name}
33
- description: Synchronisiert ueber OnlyMCP. Inhalt wird bei Bedarf geladen.
91
+ await writeFile(skillMd, `---
92
+ name: ${stubDirName(s.name)}
93
+ description: ${yamlSafe(s.description) || 'Synchronisiert ueber OnlyMCP. Inhalt wird bei Bedarf geladen.'}
94
+ ${MARKER}: true
95
+ x-onlymcp-name: ${s.name}
34
96
  ---
35
97
 
36
- Rufe \`get_skill({ name: "${s.name}" })\` am OnlyMCP-Server auf und befolge, was zurueckkommt.
98
+ Call \`get_skill({ name: "${s.name}" })\` on the OnlyMCP server and follow whatever comes back.
37
99
  `, 'utf8');
100
+ written += 1;
38
101
  // Die Begleitdateien liegen danach WIRKLICH auf der Platte, nicht hinter
39
102
  // einem Werkzeug. Genau das macht das Merkmal aus: ein Skill, dessen Text
40
103
  // "lies references/palette.md" sagt, funktioniert unveraendert, weil die
@@ -67,21 +130,30 @@ Rufe \`get_skill({ name: "${s.name}" })\` am OnlyMCP-Server auf und befolge, was
67
130
  }
68
131
  }
69
132
  await mkdir(join(dir, 'agents'), { recursive: true });
133
+ let agentsWritten = 0;
70
134
  for (const a of agents) {
71
- if (!SAFE_NAME.test(a.name))
135
+ if (!SAFE_AGENT_NAME.test(a.name))
72
136
  continue;
137
+ const dest = join(dir, 'agents', `${a.name}.md`);
138
+ if (!(await mayWrite(dest, a.name))) {
139
+ kept.push(`agents/${a.name}.md`);
140
+ continue;
141
+ }
73
142
  const description = yamlSafe(a.description);
74
143
  const model = a.model ? yamlSafe(a.model) : '';
75
144
  const tools = a.tools.map(yamlSafe).join(', ');
76
- await writeFile(join(dir, 'agents', `${a.name}.md`), `---
145
+ await writeFile(dest, `---
77
146
  name: ${a.name}
78
147
  description: ${description}
79
148
  ${model ? `model: ${model}\n` : ''}tools: ${tools}
149
+ ${MARKER}: true
150
+ x-onlymcp-name: ${a.name}
80
151
  ---
81
152
 
82
- Rufe \`get_agent_definition({ name: "${a.name}" })\` am OnlyMCP-Server auf und befolge, was zurueckkommt.
153
+ Call \`get_agent_definition({ name: "${a.name}" })\` on the OnlyMCP server and follow whatever comes back.
83
154
  `, 'utf8');
155
+ agentsWritten += 1;
84
156
  }
85
- return { skills: skills.length, agents: agents.length, files };
157
+ return { skills: written, agents: agentsWritten, files, kept };
86
158
  }
87
159
  //# sourceMappingURL=stubs.js.map
package/dist/stubs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stubs.js","sourceRoot":"","sources":["../src/stubs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stubs.js","sourceRoot":"","sources":["../src/stubs.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ export const GetAgentInput = z.object({ name: z.string().min(1).max(64) });
4
4
  export function createGetAgentDefinitionTool(api, cache) {
5
5
  return {
6
6
  name: 'get_agent_definition',
7
- description: 'Liefert den System-Prompt eines Agenten aus der OnlyMCP-Cloud.',
7
+ description: "Delivers an agent's system prompt from the OnlyMCP cloud.",
8
8
  inputSchema: GetAgentInput,
9
9
  async handler(args) {
10
10
  const key = `agent:${args.name}`;
@@ -12,7 +12,10 @@ export function createGetAgentDefinitionTool(api, cache) {
12
12
  if (cached !== null)
13
13
  return { content: [{ type: 'text', text: cached }] };
14
14
  try {
15
- const a = await api.getAgent(args.name);
15
+ // This is the one read that runs the agent, so it asks the server to
16
+ // count it. The cache above answers repeat loads without a request: the
17
+ // count for this transport is a lower bound.
18
+ const a = await api.getAgent(args.name, { use: true });
16
19
  await cache.set(key, a.body);
17
20
  return { content: [{ type: 'text', text: a.body }] };
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getAgentDefinition.js","sourceRoot":"","sources":["../../src/tools/getAgentDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE3E,MAAM,UAAU,4BAA4B,CAAC,GAAc,EAAE,KAAe;IAC1E,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE,aAAa;QAC1B,KAAK,CAAC,OAAO,CAAC,IAAmC;YAC/C,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACnF,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAChE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"getAgentDefinition.js","sourceRoot":"","sources":["../../src/tools/getAgentDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE3E,MAAM,UAAU,4BAA4B,CAAC,GAAc,EAAE,KAAe;IAC1E,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE,aAAa;QAC1B,KAAK,CAAC,OAAO,CAAC,IAAmC;YAC/C,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACnF,IAAI,CAAC;gBACH,qEAAqE;gBACrE,wEAAwE;gBACxE,6CAA6C;gBAC7C,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAChE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -4,7 +4,7 @@ export const GetSkillInput = z.object({ name: z.string().min(1).max(64) });
4
4
  export function createGetSkillTool(api, cache) {
5
5
  return {
6
6
  name: 'get_skill',
7
- description: 'Liefert den vollstaendigen Inhalt eines Skills aus der OnlyMCP-Cloud. Wird von den Stub-Dateien aufgerufen.',
7
+ description: "Delivers a skill's full content from the OnlyMCP cloud. Called from the stub files.",
8
8
  inputSchema: GetSkillInput,
9
9
  async handler(args) {
10
10
  const key = `skill:${args.name}`;
@@ -1 +1 @@
1
- {"version":3,"file":"getSkill.js","sourceRoot":"","sources":["../../src/tools/getSkill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE3E,MAAM,UAAU,kBAAkB,CAAC,GAAc,EAAE,KAAe;IAChE,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,WAAW,EACT,6GAA6G;QAC/G,WAAW,EAAE,aAAa;QAC1B,KAAK,CAAC,OAAO,CAAC,IAAmC;YAC/C,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACnF,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"getSkill.js","sourceRoot":"","sources":["../../src/tools/getSkill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE3E,MAAM,UAAU,kBAAkB,CAAC,GAAc,EAAE,KAAe;IAChE,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,WAAW,EACT,qFAAqF;QACvF,WAAW,EAAE,aAAa;QAC1B,KAAK,CAAC,OAAO,CAAC,IAAmC;YAC/C,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACnF,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -7,8 +7,8 @@ export const GetSkillFileInput = z.object({
7
7
  export function createGetSkillFileTool(api) {
8
8
  return {
9
9
  name: 'get_skill_file',
10
- description: 'Liefert eine einzelne Begleitdatei eines Skills aus der OnlyMCP-Cloud, etwa references/palette.md. ' +
11
- 'Normalerweise nicht noetig: `onlymcp sync` legt diese Dateien neben der SKILL.md ab.',
10
+ description: "Delivers a single companion file of a skill from the OnlyMCP cloud, e.g. references/palette.md. " +
11
+ 'Usually not needed: `npx onlymcp sync` places these files next to the SKILL.md.',
12
12
  inputSchema: GetSkillFileInput,
13
13
  async handler(args) {
14
14
  try {
@@ -21,7 +21,7 @@ export function createGetSkillFileTool(api) {
21
21
  content: [
22
22
  {
23
23
  type: 'text',
24
- text: `errors.BINARY_FILE ${file.path} (${file.size} Bytes) - mit \`onlymcp sync\` auf die Platte holen.`,
24
+ text: `errors.BINARY_FILE ${file.path} (${file.size} bytes) - fetch it to disk with \`npx onlymcp sync\`.`,
25
25
  },
26
26
  ],
27
27
  isError: true,
@@ -1 +1 @@
1
- {"version":3,"file":"getSkillFile.js","sourceRoot":"","sources":["../../src/tools/getSkillFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CAAC,GAAc;IACnD,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,qGAAqG;YACrG,sFAAsF;QACxF,WAAW,EAAE,iBAAiB;QAC9B,KAAK,CAAC,OAAO,CAAC,IAAuC;YACnD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1D,wEAAwE;gBACxE,gEAAgE;gBAChE,6DAA6D;gBAC7D,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC/B,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,sBAAsB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,sDAAsD;6BAC1G;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACtE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"getSkillFile.js","sourceRoot":"","sources":["../../src/tools/getSkillFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CAAC,GAAc;IACnD,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,kGAAkG;YAClG,iFAAiF;QACnF,WAAW,EAAE,iBAAiB;QAC9B,KAAK,CAAC,OAAO,CAAC,IAAuC;YACnD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1D,wEAAwE;gBACxE,gEAAgE;gBAChE,6DAA6D;gBAC7D,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC/B,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,sBAAsB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,uDAAuD;6BAC3G;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACtE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { z } from 'zod';
2
+ import type { ApiClient } from '../apiClient.js';
3
+ /**
4
+ * Die vier Werkzeuge aus Paket 03 Aufgabe 14: suchen, Baum, verschieben,
5
+ * Links. Dieselben vier wie auf der gehosteten Oberflaeche (Spec 7), hier
6
+ * ueber die REST-API statt ueber die Datenbank - damit eine Rangfolge, ein
7
+ * Baum und eine Umbenennung nicht davon abhaengen, welcher Server gefragt
8
+ * wurde.
9
+ */
10
+ type Result = {
11
+ content: {
12
+ type: 'text';
13
+ text: string;
14
+ }[];
15
+ isError?: boolean;
16
+ };
17
+ export declare const MemorySearchInput: z.ZodObject<{
18
+ query: z.ZodString;
19
+ types: z.ZodOptional<z.ZodString>;
20
+ limit: z.ZodOptional<z.ZodNumber>;
21
+ }, z.core.$strip>;
22
+ export declare function createMemorySearchTool(api: ApiClient): {
23
+ name: string;
24
+ description: string;
25
+ inputSchema: z.ZodObject<{
26
+ query: z.ZodString;
27
+ types: z.ZodOptional<z.ZodString>;
28
+ limit: z.ZodOptional<z.ZodNumber>;
29
+ }, z.core.$strip>;
30
+ handler(args: z.infer<typeof MemorySearchInput>): Promise<Result>;
31
+ };
32
+ export declare const MemoryTreeInput: z.ZodObject<{
33
+ scope: z.ZodOptional<z.ZodString>;
34
+ }, z.core.$strip>;
35
+ export declare function createMemoryTreeTool(api: ApiClient): {
36
+ name: string;
37
+ description: string;
38
+ inputSchema: z.ZodObject<{
39
+ scope: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>;
41
+ handler(args: z.infer<typeof MemoryTreeInput>): Promise<Result>;
42
+ };
43
+ export declare const MemoryMoveInput: z.ZodObject<{
44
+ from: z.ZodString;
45
+ to: z.ZodString;
46
+ updateLinks: z.ZodOptional<z.ZodBoolean>;
47
+ }, z.core.$strip>;
48
+ export declare function createMemoryMoveTool(api: ApiClient): {
49
+ name: string;
50
+ description: string;
51
+ inputSchema: z.ZodObject<{
52
+ from: z.ZodString;
53
+ to: z.ZodString;
54
+ updateLinks: z.ZodOptional<z.ZodBoolean>;
55
+ }, z.core.$strip>;
56
+ handler(args: z.infer<typeof MemoryMoveInput>): Promise<Result>;
57
+ };
58
+ export declare const MemoryLinksInput: z.ZodObject<{
59
+ path: z.ZodString;
60
+ }, z.core.$strip>;
61
+ export declare function createMemoryLinksTool(api: ApiClient): {
62
+ name: string;
63
+ description: string;
64
+ inputSchema: z.ZodObject<{
65
+ path: z.ZodString;
66
+ }, z.core.$strip>;
67
+ handler(args: z.infer<typeof MemoryLinksInput>): Promise<Result>;
68
+ };
69
+ export {};
@@ -0,0 +1,128 @@
1
+ import { z } from 'zod';
2
+ import { ApiError } from '../apiClient.js';
3
+ import { isSafeMemoryPath } from '../memoryPath.js';
4
+ const text = (s) => ({ content: [{ type: 'text', text: s }] });
5
+ const failure = (s) => ({ content: [{ type: 'text', text: s }], isError: true });
6
+ function codeOf(e) {
7
+ return e instanceof ApiError ? e.code : 'errors.UNKNOWN';
8
+ }
9
+ export const MemorySearchInput = z.object({
10
+ query: z.string().min(1).max(200),
11
+ types: z.string().max(64).optional(),
12
+ limit: z.number().int().min(1).max(50).optional(),
13
+ });
14
+ export function createMemorySearchTool(api) {
15
+ return {
16
+ name: 'memory_search',
17
+ description: 'Full-text search across memory, skills and agents. Delivers the best hits with a short snippet each.',
18
+ inputSchema: MemorySearchInput,
19
+ async handler(args) {
20
+ try {
21
+ const { hits } = await api.searchContent(args.query, {
22
+ types: args.types?.split(',').map((t) => t.trim()).filter((t) => t !== ''),
23
+ limit: args.limit,
24
+ });
25
+ if (hits.length === 0)
26
+ return text(`Nothing found for ${args.query}`);
27
+ // Die Adresse zuerst: der naechste Aufruf ist memory_read(path) oder
28
+ // get_skill(name), und was dafuer gebraucht wird, darf nicht im
29
+ // Ausschnitt untergehen.
30
+ return text(hits
31
+ .map((h) => `${h.kind} ${h.path ?? h.name}${h.scope === 'team' ? ' (team)' : ''}\n ${h.snippet}`)
32
+ .join('\n'));
33
+ }
34
+ catch (e) {
35
+ return failure(codeOf(e));
36
+ }
37
+ },
38
+ };
39
+ }
40
+ export const MemoryTreeInput = z.object({ scope: z.string().max(96).optional() });
41
+ export function createMemoryTreeTool(api) {
42
+ return {
43
+ name: 'memory_tree',
44
+ description: 'This account\'s folder structure: every folder, empty ones included, and the files in it.',
45
+ inputSchema: MemoryTreeInput,
46
+ async handler(args) {
47
+ try {
48
+ const { nodes } = await api.memoryTree(args.scope ?? 'all');
49
+ if (nodes.length === 0)
50
+ return text('(empty)');
51
+ return text(nodes
52
+ .map((n) => {
53
+ const depth = n.path.split('/').length - 1;
54
+ const label = n.kind === 'folder' ? `${n.name}/` : n.name;
55
+ return `${' '.repeat(depth)}${label}${n.scope === 'team' ? ' (team)' : ''}`;
56
+ })
57
+ .join('\n'));
58
+ }
59
+ catch (e) {
60
+ return failure(codeOf(e));
61
+ }
62
+ },
63
+ };
64
+ }
65
+ export const MemoryMoveInput = z.object({
66
+ from: z.string().min(3).max(256),
67
+ to: z.string().min(3).max(256),
68
+ updateLinks: z.boolean().optional(),
69
+ });
70
+ /** "1 file", "2 files": the move answers in files. */
71
+ function files(count) {
72
+ return `${count} ${count === 1 ? 'file' : 'files'}`;
73
+ }
74
+ export function createMemoryMoveTool(api) {
75
+ return {
76
+ name: 'memory_move',
77
+ description: "Moves or renames a memory file. Every [[link]] that would no longer find it follows along, by name or by path, unless turned off.",
78
+ inputSchema: MemoryMoveInput,
79
+ async handler(args) {
80
+ // Beide Pfade hier geprueft und nicht erst am Server: siehe
81
+ // memoryPath.ts - encodeURIComponent laesst ".." als zwei Punkte durch.
82
+ if (!isSafeMemoryPath(args.from) || !isSafeMemoryPath(args.to))
83
+ return failure('errors.INVALID_PATH');
84
+ const updateLinks = args.updateLinks ?? true;
85
+ try {
86
+ const r = await api.moveMemory(args.from, args.to, updateLinks);
87
+ return text(`${r.from} moved to ${r.to}` +
88
+ // The counts are files, not links: a file with three links to the moved one is one.
89
+ (updateLinks ? `, links updated in ${files(r.rewritten)}, ${files(r.skipped)} left unchanged` : ''));
90
+ }
91
+ catch (e) {
92
+ return failure(codeOf(e));
93
+ }
94
+ },
95
+ };
96
+ }
97
+ export const MemoryLinksInput = z.object({ path: z.string().min(3).max(256) });
98
+ export function createMemoryLinksTool(api) {
99
+ return {
100
+ name: 'memory_links',
101
+ description: "A memory file's [[links]], split between the ones that point somewhere and the ones that point nowhere.",
102
+ inputSchema: MemoryLinksInput,
103
+ async handler(args) {
104
+ if (!isSafeMemoryPath(args.path))
105
+ return failure('errors.INVALID_PATH');
106
+ try {
107
+ const file = await api.readMemory(args.path);
108
+ const { resolved, unresolved } = file.links;
109
+ if (resolved.length === 0 && unresolved.length === 0) {
110
+ return text(`${args.path} does not link to anything.`);
111
+ }
112
+ // Eine offene Verknuepfung ist kein Fehler und wird nicht versteckt:
113
+ // sie ist eine Notiz, die jemand schreiben wollte und noch nicht
114
+ // geschrieben hat. Genau dafuer gibt es die Trennung (Spec 4.3).
115
+ return text([
116
+ resolved.length > 0 ? `Resolved: ${resolved.join(', ')}` : '',
117
+ unresolved.length > 0 ? `Open (no file with this name yet): ${unresolved.join(', ')}` : '',
118
+ ]
119
+ .filter((line) => line !== '')
120
+ .join('\n'));
121
+ }
122
+ catch (e) {
123
+ return failure(codeOf(e));
124
+ }
125
+ },
126
+ };
127
+ }
128
+ //# sourceMappingURL=memoryGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryGraph.js","sourceRoot":"","sources":["../../src/tools/memoryGraph.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export function createMemoryReadTool(api) {
6
6
  const inFlight = new Map();
7
7
  return {
8
8
  name: 'memory_read',
9
- description: 'Liest eine Memory-Datei live aus der OnlyMCP-Cloud. Kein Diskcache.',
9
+ description: 'Reads a memory file live from the OnlyMCP cloud. No disk cache.',
10
10
  inputSchema: MemoryReadInput,
11
11
  async handler(args) {
12
12
  if (!isSafeMemoryPath(args.path)) {
@@ -1 +1 @@
1
- {"version":3,"file":"memoryRead.js","sourceRoot":"","sources":["../../src/tools/memoryRead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAE9E,MAAM,UAAU,oBAAoB,CAAC,GAAc;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,qEAAqE;QAClF,WAAW,EAAE,eAAe;QAC5B,KAAK,CAAC,OAAO,CAAC,IAAqC;YACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9F,CAAC;YACD,IAAI,CAAC;gBACH,mEAAmE;gBACnE,2DAA2D;gBAC3D,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACP,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACrD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC3B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9C,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACjE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"memoryRead.js","sourceRoot":"","sources":["../../src/tools/memoryRead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAE9E,MAAM,UAAU,oBAAoB,CAAC,GAAc;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,eAAe;QAC5B,KAAK,CAAC,OAAO,CAAC,IAAqC;YACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9F,CAAC;YACD,IAAI,CAAC;gBACH,mEAAmE;gBACnE,2DAA2D;gBAC3D,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACP,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACrD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC3B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9C,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACjE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -9,7 +9,7 @@ export const MemoryWriteInput = z.object({
9
9
  export function createMemoryWriteTool(api) {
10
10
  return {
11
11
  name: 'memory_write',
12
- description: 'Schreibt eine Memory-Datei live in die OnlyMCP-Cloud (write-through).',
12
+ description: 'Writes a memory file live into the OnlyMCP cloud (write-through).',
13
13
  inputSchema: MemoryWriteInput,
14
14
  async handler(args) {
15
15
  if (!isSafeMemoryPath(args.path)) {
@@ -1 +1 @@
1
- {"version":3,"file":"memoryWrite.js","sourceRoot":"","sources":["../../src/tools/memoryWrite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,UAAU,qBAAqB,CAAC,GAAc;IAClD,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,uEAAuE;QACpF,WAAW,EAAE,gBAAgB;QAC7B,KAAK,CAAC,OAAO,CAAC,IAAsC;YAClD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9F,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACvE,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO;oBACtB,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBAC1F,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"memoryWrite.js","sourceRoot":"","sources":["../../src/tools/memoryWrite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,UAAU,qBAAqB,CAAC,GAAc;IAClD,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,mEAAmE;QAChF,WAAW,EAAE,gBAAgB;QAC7B,KAAK,CAAC,OAAO,CAAC,IAAsC;YAClD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9F,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACvE,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO;oBACtB,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBAC1F,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "onlymcp",
3
- "version": "0.9.1",
4
- "description": "Skills, Agents und Memory aus der OnlyMCP-Cloud in jedem MCP-Client. Enthaelt den stdio-MCP-Server und die CLI zum Einrichten von Claude Code, Codex und Gemini CLI.",
3
+ "version": "0.11.0",
4
+ "description": "Skills, agents and memory from the OnlyMCP cloud in every MCP client. Ships the stdio MCP server and the CLI that sets up Claude Code, Codex and Gemini CLI.",
5
5
  "license": "MIT",
6
6
  "author": "Francesco Palazzo",
7
7
  "homepage": "https://only-mcp.com",
@@ -35,15 +35,16 @@
35
35
  "scripts": {
36
36
  "build": "tsc",
37
37
  "typecheck": "tsc --noEmit",
38
- "test": "vitest run",
38
+ "test": "node ../../scripts/sync-registry.mjs --check && vitest run",
39
39
  "prepublishOnly": "pnpm build"
40
40
  },
41
41
  "dependencies": {
42
+ "@clack/prompts": "^1.7.0",
42
43
  "@modelcontextprotocol/sdk": "^1.30.0",
43
44
  "@napi-rs/keyring": "^1.3.0",
44
- "@clack/prompts": "^1.7.0",
45
45
  "cacache": "^21.0.1",
46
46
  "commander": "^15.0.0",
47
+ "fflate": "^0.8.3",
47
48
  "open": "^11.0.1",
48
49
  "qrcode": "^1.5.4",
49
50
  "zod": "^4.4.3"