onlymcp 0.17.0 → 0.20.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.
- package/LICENSE +33 -17
- package/README.md +2 -1
- package/dist/bin/cli.js +68 -583
- package/dist/bin/mcp.js +45 -73
- package/package.json +7 -10
- package/dist/apiBaseUrl.d.ts +0 -12
- package/dist/apiBaseUrl.js +0 -28
- package/dist/apiBaseUrl.js.map +0 -1
- package/dist/apiClient.d.ts +0 -296
- package/dist/apiClient.js +0 -224
- package/dist/apiClient.js.map +0 -1
- package/dist/auth/deviceLogin.d.ts +0 -5
- package/dist/auth/deviceLogin.js +0 -40
- package/dist/auth/deviceLogin.js.map +0 -1
- package/dist/auth/keyring.d.ts +0 -16
- package/dist/auth/keyring.js +0 -33
- package/dist/auth/keyring.js.map +0 -1
- package/dist/bin/cli.d.ts +0 -2
- package/dist/bin/cli.js.map +0 -1
- package/dist/bin/mcp.d.ts +0 -2
- package/dist/bin/mcp.js.map +0 -1
- package/dist/cache.d.ts +0 -7
- package/dist/cache.js +0 -32
- package/dist/cache.js.map +0 -1
- package/dist/deviceId.d.ts +0 -2
- package/dist/deviceId.js +0 -97
- package/dist/deviceId.js.map +0 -1
- package/dist/export/unpack.d.ts +0 -33
- package/dist/export/unpack.js +0 -54
- package/dist/export/unpack.js.map +0 -1
- package/dist/identity.d.ts +0 -29
- package/dist/identity.js +0 -116
- package/dist/identity.js.map +0 -1
- package/dist/import/collect.d.ts +0 -25
- package/dist/import/collect.js +0 -101
- package/dist/import/collect.js.map +0 -1
- package/dist/import/frontmatter.d.ts +0 -44
- package/dist/import/frontmatter.js +0 -93
- package/dist/import/frontmatter.js.map +0 -1
- package/dist/import/plan.d.ts +0 -74
- package/dist/import/plan.js +0 -190
- package/dist/import/plan.js.map +0 -1
- package/dist/import/prune.d.ts +0 -46
- package/dist/import/prune.js +0 -61
- package/dist/import/prune.js.map +0 -1
- package/dist/import/secrets.d.ts +0 -7
- package/dist/import/secrets.js +0 -77
- package/dist/import/secrets.js.map +0 -1
- package/dist/import/upload.d.ts +0 -21
- package/dist/import/upload.js +0 -99
- package/dist/import/upload.js.map +0 -1
- package/dist/install.d.ts +0 -81
- package/dist/install.js +0 -168
- package/dist/install.js.map +0 -1
- package/dist/instructions.d.ts +0 -4
- package/dist/instructions.js +0 -67
- package/dist/instructions.js.map +0 -1
- package/dist/memoryPath.d.ts +0 -1
- package/dist/memoryPath.js +0 -13
- package/dist/memoryPath.js.map +0 -1
- package/dist/memorySync.d.ts +0 -28
- package/dist/memorySync.js +0 -56
- package/dist/memorySync.js.map +0 -1
- package/dist/paths.d.ts +0 -18
- package/dist/paths.js +0 -62
- package/dist/paths.js.map +0 -1
- package/dist/registry/caveats.d.ts +0 -17
- package/dist/registry/caveats.js +0 -74
- package/dist/registry/caveats.js.map +0 -1
- package/dist/registry/clients.d.ts +0 -17
- package/dist/registry/clients.js +0 -402
- package/dist/registry/clients.js.map +0 -1
- package/dist/registry/index.d.ts +0 -6
- package/dist/registry/index.js +0 -7
- package/dist/registry/index.js.map +0 -1
- package/dist/registry/serverInfo.d.ts +0 -25
- package/dist/registry/serverInfo.js +0 -33
- package/dist/registry/serverInfo.js.map +0 -1
- package/dist/registry/servers.d.ts +0 -58
- package/dist/registry/servers.js +0 -259
- package/dist/registry/servers.js.map +0 -1
- package/dist/registry/toolHints.d.ts +0 -29
- package/dist/registry/toolHints.js +0 -41
- package/dist/registry/toolHints.js.map +0 -1
- package/dist/registry/types.d.ts +0 -71
- package/dist/registry/types.js +0 -6
- package/dist/registry/types.js.map +0 -1
- package/dist/skillFilePath.d.ts +0 -1
- package/dist/skillFilePath.js +0 -29
- package/dist/skillFilePath.js.map +0 -1
- package/dist/stubIgnore.d.ts +0 -22
- package/dist/stubIgnore.js +0 -29
- package/dist/stubIgnore.js.map +0 -1
- package/dist/stubs.d.ts +0 -12
- package/dist/stubs.js +0 -188
- package/dist/stubs.js.map +0 -1
- package/dist/tools/connections.d.ts +0 -154
- package/dist/tools/connections.js +0 -164
- package/dist/tools/connections.js.map +0 -1
- package/dist/tools/getAgentDefinition.d.ts +0 -26
- package/dist/tools/getAgentDefinition.js +0 -29
- package/dist/tools/getAgentDefinition.js.map +0 -1
- package/dist/tools/getSkill.d.ts +0 -26
- package/dist/tools/getSkill.js +0 -26
- package/dist/tools/getSkill.js.map +0 -1
- package/dist/tools/getSkillFile.d.ts +0 -27
- package/dist/tools/getSkillFile.js +0 -39
- package/dist/tools/getSkillFile.js.map +0 -1
- package/dist/tools/index.d.ts +0 -263
- package/dist/tools/index.js +0 -69
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/lists.d.ts +0 -38
- package/dist/tools/lists.js +0 -39
- package/dist/tools/lists.js.map +0 -1
- package/dist/tools/memoryGraph.d.ts +0 -69
- package/dist/tools/memoryGraph.js +0 -128
- package/dist/tools/memoryGraph.js.map +0 -1
- package/dist/tools/memoryRead.d.ts +0 -25
- package/dist/tools/memoryRead.js +0 -33
- package/dist/tools/memoryRead.js.map +0 -1
- package/dist/tools/memoryWrite.d.ts +0 -27
- package/dist/tools/memoryWrite.js +0 -34
- package/dist/tools/memoryWrite.js.map +0 -1
- package/dist/tools/write.d.ts +0 -166
- package/dist/tools/write.js +0 -193
- package/dist/tools/write.js.map +0 -1
package/dist/stubs.js
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { access, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { dirname, join } from 'node:path';
|
|
3
|
-
import { headerField, headerOf } from './import/frontmatter.js';
|
|
4
|
-
import { ignoreNothing } from './stubIgnore.js';
|
|
5
|
-
// Der Client prueft den Pfad, den der Server geschickt hat, unabhaengig davon,
|
|
6
|
-
// dass der Server ihn beim Schreiben schon geprueft hat: hier wird aus einem
|
|
7
|
-
// Pfad ein echter Schreibvorgang auf einer echten Platte.
|
|
8
|
-
import { isSafeSkillFilePath } from './skillFilePath.js';
|
|
9
|
-
// Gleiche Positivliste wie server-seitig (packages/api/src/http/names.ts,
|
|
10
|
-
// skillName/agentName). Dieses Paket haengt nicht von @onlymcp/api ab, also
|
|
11
|
-
// keine gemeinsame Konstante, aber ein Name, der so nie in der Datenbank
|
|
12
|
-
// entstehen sollte, darf trotzdem nie als Pfadsegment landen: ein falsch
|
|
13
|
-
// konfiguriertes oder kompromittiertes ONLYMCP_API_URL soll niemals Dateien
|
|
14
|
-
// ausserhalb von `dir` schreiben koennen, egal was der Server zurueckgibt.
|
|
15
|
-
const SAFE_AGENT_NAME = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
16
|
-
// Skills duerfen seit Aufgabe 11 einen Namensraum tragen.
|
|
17
|
-
const SAFE_SKILL_NAME = /^[a-z0-9]+(-[a-z0-9]+)*(:[a-z0-9]+(-[a-z0-9]+)*)?$/;
|
|
18
|
-
/**
|
|
19
|
-
* Das Merkmal, an dem `collect` einen Stub wiedererkennt.
|
|
20
|
-
*
|
|
21
|
-
* Es ist der Grund, warum Stubs ueberhaupt in `~/.claude/skills` liegen
|
|
22
|
-
* duerfen: ohne dieses Feld laedt der naechste `onlymcp import` jeden
|
|
23
|
-
* Platzhalter als Skill hoch und ersetzt damit den echten Inhalt durch den
|
|
24
|
-
* Satz "ruf get_skill auf".
|
|
25
|
-
*/
|
|
26
|
-
const MARKER = 'x-onlymcp-stub';
|
|
27
|
-
/**
|
|
28
|
-
* Der Ordnername eines Stubs.
|
|
29
|
-
*
|
|
30
|
-
* Ein Skill kann `superpowers:brainstorming` heissen, ein Ordner auf einer
|
|
31
|
-
* Windows-Platte kann keinen Doppelpunkt tragen, und der Scanner eines
|
|
32
|
-
* Clients erwartet ohnehin, dass `name:` zum Ordner passt. Der Stub heisst
|
|
33
|
-
* deshalb lokal `superpowers-brainstorming` und ruft im Text den echten
|
|
34
|
-
* Namen auf. `x-onlymcp-name` haelt fest, welcher das ist - daran erkennt
|
|
35
|
-
* der naechste Lauf, ob der Ordner ihm gehoert oder einem anderen Skill.
|
|
36
|
-
*/
|
|
37
|
-
function stubDirName(name) {
|
|
38
|
-
return name.replace(/:/g, '-');
|
|
39
|
-
}
|
|
40
|
-
// Frontmatter ist YAML, aber die Werte (description, model, jeder Tool-Name)
|
|
41
|
-
// kommen ungeprueft vom Server. Ein Wert mit Zeilenumbruch koennte sonst aus
|
|
42
|
-
// seiner eigenen Zeile ausbrechen und zusaetzliche Frontmatter-Felder
|
|
43
|
-
// einschleusen (z.B. ein erfundenes weiteres `tools:`). Zeilenumbrueche
|
|
44
|
-
// werden deshalb entfernt, nicht escaped: ein Skill-/Agent-Name oder eine
|
|
45
|
-
// Beschreibung braucht nie einen Zeilenumbruch, um sinnvoll zu sein.
|
|
46
|
-
function yamlSafe(value) {
|
|
47
|
-
return (value ?? '').replace(/[\r\n]+/g, ' ').trim();
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Darf an diese Stelle geschrieben werden?
|
|
51
|
-
*
|
|
52
|
-
* Seit Aufgabe 12 liegen die Stubs in `~/.claude/skills` und `~/.codex/skills`
|
|
53
|
-
* - denselben Ordnern, aus denen importiert wird. Eine bestehende Datei, die
|
|
54
|
-
* kein Stub ist, ist die echte Arbeit eines Menschen und wird nicht
|
|
55
|
-
* ueberschrieben. Gehoert ein vorhandener Stub einem anderen Skill (zwei
|
|
56
|
-
* Plugins mit demselben Skill-Namen ergeben denselben Ordnernamen), bleibt
|
|
57
|
-
* ebenfalls stehen, was da ist: der erste hat ihn, der zweite wird gemeldet.
|
|
58
|
-
*/
|
|
59
|
-
async function mayWrite(path, owner) {
|
|
60
|
-
let existing;
|
|
61
|
-
try {
|
|
62
|
-
existing = await readFile(path, 'utf8');
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return true; // nicht da, also frei
|
|
66
|
-
}
|
|
67
|
-
const head = headerOf(existing);
|
|
68
|
-
if (head === null || headerField(head, MARKER) !== 'true')
|
|
69
|
-
return false;
|
|
70
|
-
const mine = headerField(head, 'x-onlymcp-name');
|
|
71
|
-
return mine === undefined || mine === owner;
|
|
72
|
-
}
|
|
73
|
-
/** Is there a stub of `owner` at `path`, one this tool wrote and may take back? */
|
|
74
|
-
async function isOwnStub(path, owner) {
|
|
75
|
-
const there = await access(path).then(() => true, () => false);
|
|
76
|
-
return there && (await mayWrite(path, owner));
|
|
77
|
-
}
|
|
78
|
-
export async function writeStubs(api, dir, opts = {}) {
|
|
79
|
-
const ignore = opts.ignore ?? ignoreNothing;
|
|
80
|
-
const [{ skills }, { agents }] = await Promise.all([api.listSkills(), api.listAgents()]);
|
|
81
|
-
let files = 0;
|
|
82
|
-
let written = 0;
|
|
83
|
-
/** Was stehen geblieben ist, weil dort schon etwas Echtes lag. */
|
|
84
|
-
const kept = [];
|
|
85
|
-
/** The names stub-ignore left out, and how many stubs of theirs this run took back. */
|
|
86
|
-
const ignored = [];
|
|
87
|
-
let removed = 0;
|
|
88
|
-
for (const s of skills) {
|
|
89
|
-
if (!SAFE_SKILL_NAME.test(s.name))
|
|
90
|
-
continue;
|
|
91
|
-
const target = join(dir, 'skills', stubDirName(s.name));
|
|
92
|
-
const skillMd = join(target, 'SKILL.md');
|
|
93
|
-
// By its name or by its folder name, the one a user sees on disk.
|
|
94
|
-
if (ignore(s.name) || ignore(stubDirName(s.name))) {
|
|
95
|
-
ignored.push(s.name);
|
|
96
|
-
// The whole folder: beside the stub it holds only the companion files an
|
|
97
|
-
// earlier run copied in, and every run overwrites those anyway.
|
|
98
|
-
if (await isOwnStub(skillMd, s.name)) {
|
|
99
|
-
await rm(target, { recursive: true, force: true });
|
|
100
|
-
removed += 1;
|
|
101
|
-
}
|
|
102
|
-
continue;
|
|
103
|
-
}
|
|
104
|
-
if (!(await mayWrite(skillMd, s.name))) {
|
|
105
|
-
// Auch die Begleitdateien bleiben aus: sie in einen fremden Skill-Ordner
|
|
106
|
-
// zu legen machte aus einer geschonten Datei einen halb ueberschriebenen
|
|
107
|
-
// Ordner.
|
|
108
|
-
kept.push(`skills/${stubDirName(s.name)}`);
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
await mkdir(target, { recursive: true });
|
|
112
|
-
await writeFile(skillMd, `---
|
|
113
|
-
name: ${stubDirName(s.name)}
|
|
114
|
-
description: ${yamlSafe(s.description) || 'Synchronisiert ueber OnlyMCP. Inhalt wird bei Bedarf geladen.'}
|
|
115
|
-
${MARKER}: true
|
|
116
|
-
x-onlymcp-name: ${s.name}
|
|
117
|
-
---
|
|
118
|
-
|
|
119
|
-
Call \`get_skill({ name: "${s.name}" })\` on the OnlyMCP server and follow whatever comes back.
|
|
120
|
-
`, 'utf8');
|
|
121
|
-
written += 1;
|
|
122
|
-
// Die Begleitdateien liegen danach WIRKLICH auf der Platte, nicht hinter
|
|
123
|
-
// einem Werkzeug. Genau das macht das Merkmal aus: ein Skill, dessen Text
|
|
124
|
-
// "lies references/palette.md" sagt, funktioniert unveraendert, weil die
|
|
125
|
-
// Datei da ist. Nur die SKILL.md bleibt ein Stub - sie ist die einzige,
|
|
126
|
-
// die jeder Client ohnehin zuerst liest, und der Sparsinn des Verfahrens
|
|
127
|
-
// haengt an ihr.
|
|
128
|
-
//
|
|
129
|
-
// Faellt der Abruf aus, bleibt der Stub trotzdem stehen: ein Client, der
|
|
130
|
-
// den Server gerade nicht erreicht, soll wenigstens wissen, dass es den
|
|
131
|
-
// Skill gibt.
|
|
132
|
-
try {
|
|
133
|
-
const detail = await api.getSkill(s.name);
|
|
134
|
-
for (const meta of detail.files ?? []) {
|
|
135
|
-
if (!isSafeSkillFilePath(meta.path))
|
|
136
|
-
continue;
|
|
137
|
-
const file = await api.getSkillFile(s.name, meta.path);
|
|
138
|
-
const dest = join(target, ...meta.path.split('/'));
|
|
139
|
-
await mkdir(dirname(dest), { recursive: true });
|
|
140
|
-
if (file.encoding === 'base64') {
|
|
141
|
-
await writeFile(dest, Buffer.from(file.content, 'base64'));
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
await writeFile(dest, file.content, 'utf8');
|
|
145
|
-
}
|
|
146
|
-
files += 1;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
// absichtlich still, siehe oben
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
await mkdir(join(dir, 'agents'), { recursive: true });
|
|
154
|
-
let agentsWritten = 0;
|
|
155
|
-
for (const a of agents) {
|
|
156
|
-
if (!SAFE_AGENT_NAME.test(a.name))
|
|
157
|
-
continue;
|
|
158
|
-
const dest = join(dir, 'agents', `${a.name}.md`);
|
|
159
|
-
if (ignore(a.name)) {
|
|
160
|
-
ignored.push(a.name);
|
|
161
|
-
if (await isOwnStub(dest, a.name)) {
|
|
162
|
-
await rm(dest);
|
|
163
|
-
removed += 1;
|
|
164
|
-
}
|
|
165
|
-
continue;
|
|
166
|
-
}
|
|
167
|
-
if (!(await mayWrite(dest, a.name))) {
|
|
168
|
-
kept.push(`agents/${a.name}.md`);
|
|
169
|
-
continue;
|
|
170
|
-
}
|
|
171
|
-
const description = yamlSafe(a.description);
|
|
172
|
-
const model = a.model ? yamlSafe(a.model) : '';
|
|
173
|
-
const tools = a.tools.map(yamlSafe).join(', ');
|
|
174
|
-
await writeFile(dest, `---
|
|
175
|
-
name: ${a.name}
|
|
176
|
-
description: ${description}
|
|
177
|
-
${model ? `model: ${model}\n` : ''}tools: ${tools}
|
|
178
|
-
${MARKER}: true
|
|
179
|
-
x-onlymcp-name: ${a.name}
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
Call \`get_agent_definition({ name: "${a.name}" })\` on the OnlyMCP server and follow whatever comes back.
|
|
183
|
-
`, 'utf8');
|
|
184
|
-
agentsWritten += 1;
|
|
185
|
-
}
|
|
186
|
-
return { skills: written, agents: agentsWritten, files, kept, ignored, removed };
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=stubs.js.map
|
package/dist/stubs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stubs.js","sourceRoot":"","sources":["../src/stubs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import type { ApiClient } from '../apiClient.js';
|
|
3
|
-
export declare const ListConnectionsInput: z.ZodObject<{}, z.core.$strip>;
|
|
4
|
-
export declare function createListConnectionsTool(api: ApiClient): {
|
|
5
|
-
name: string;
|
|
6
|
-
description: string;
|
|
7
|
-
inputSchema: z.ZodObject<{}, z.core.$strip>;
|
|
8
|
-
handler: () => Promise<{
|
|
9
|
-
content: {
|
|
10
|
-
type: "text";
|
|
11
|
-
text: string;
|
|
12
|
-
}[];
|
|
13
|
-
}>;
|
|
14
|
-
};
|
|
15
|
-
export declare const ConnectionCreateInput: z.ZodObject<{
|
|
16
|
-
name: z.ZodString;
|
|
17
|
-
slug: z.ZodString;
|
|
18
|
-
url: z.ZodString;
|
|
19
|
-
transport: z.ZodDefault<z.ZodEnum<{
|
|
20
|
-
http: "http";
|
|
21
|
-
sse: "sse";
|
|
22
|
-
}>>;
|
|
23
|
-
authType: z.ZodDefault<z.ZodEnum<{
|
|
24
|
-
none: "none";
|
|
25
|
-
bearer: "bearer";
|
|
26
|
-
header: "header";
|
|
27
|
-
}>>;
|
|
28
|
-
authHeaderName: z.ZodOptional<z.ZodString>;
|
|
29
|
-
secret: z.ZodOptional<z.ZodString>;
|
|
30
|
-
teamId: z.ZodOptional<z.ZodString>;
|
|
31
|
-
}, z.core.$strip>;
|
|
32
|
-
export declare function createConnectionCreateTool(api: ApiClient): {
|
|
33
|
-
name: string;
|
|
34
|
-
description: string;
|
|
35
|
-
inputSchema: z.ZodObject<{
|
|
36
|
-
name: z.ZodString;
|
|
37
|
-
slug: z.ZodString;
|
|
38
|
-
url: z.ZodString;
|
|
39
|
-
transport: z.ZodDefault<z.ZodEnum<{
|
|
40
|
-
http: "http";
|
|
41
|
-
sse: "sse";
|
|
42
|
-
}>>;
|
|
43
|
-
authType: z.ZodDefault<z.ZodEnum<{
|
|
44
|
-
none: "none";
|
|
45
|
-
bearer: "bearer";
|
|
46
|
-
header: "header";
|
|
47
|
-
}>>;
|
|
48
|
-
authHeaderName: z.ZodOptional<z.ZodString>;
|
|
49
|
-
secret: z.ZodOptional<z.ZodString>;
|
|
50
|
-
teamId: z.ZodOptional<z.ZodString>;
|
|
51
|
-
}, z.core.$strip>;
|
|
52
|
-
handler: (args: z.infer<typeof ConnectionCreateInput>) => Promise<{
|
|
53
|
-
content: {
|
|
54
|
-
type: "text";
|
|
55
|
-
text: string;
|
|
56
|
-
}[];
|
|
57
|
-
}>;
|
|
58
|
-
};
|
|
59
|
-
export declare const ConnectionUpdateInput: z.ZodObject<{
|
|
60
|
-
slug: z.ZodString;
|
|
61
|
-
name: z.ZodOptional<z.ZodString>;
|
|
62
|
-
url: z.ZodOptional<z.ZodString>;
|
|
63
|
-
transport: z.ZodOptional<z.ZodEnum<{
|
|
64
|
-
http: "http";
|
|
65
|
-
sse: "sse";
|
|
66
|
-
}>>;
|
|
67
|
-
authType: z.ZodOptional<z.ZodEnum<{
|
|
68
|
-
none: "none";
|
|
69
|
-
bearer: "bearer";
|
|
70
|
-
header: "header";
|
|
71
|
-
}>>;
|
|
72
|
-
authHeaderName: z.ZodOptional<z.ZodString>;
|
|
73
|
-
secret: z.ZodOptional<z.ZodString>;
|
|
74
|
-
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
75
|
-
}, z.core.$strip>;
|
|
76
|
-
export declare function createConnectionUpdateTool(api: ApiClient): {
|
|
77
|
-
name: string;
|
|
78
|
-
description: string;
|
|
79
|
-
inputSchema: z.ZodObject<{
|
|
80
|
-
slug: z.ZodString;
|
|
81
|
-
name: z.ZodOptional<z.ZodString>;
|
|
82
|
-
url: z.ZodOptional<z.ZodString>;
|
|
83
|
-
transport: z.ZodOptional<z.ZodEnum<{
|
|
84
|
-
http: "http";
|
|
85
|
-
sse: "sse";
|
|
86
|
-
}>>;
|
|
87
|
-
authType: z.ZodOptional<z.ZodEnum<{
|
|
88
|
-
none: "none";
|
|
89
|
-
bearer: "bearer";
|
|
90
|
-
header: "header";
|
|
91
|
-
}>>;
|
|
92
|
-
authHeaderName: z.ZodOptional<z.ZodString>;
|
|
93
|
-
secret: z.ZodOptional<z.ZodString>;
|
|
94
|
-
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
95
|
-
}, z.core.$strip>;
|
|
96
|
-
handler: (args: z.infer<typeof ConnectionUpdateInput>) => Promise<{
|
|
97
|
-
content: {
|
|
98
|
-
type: "text";
|
|
99
|
-
text: string;
|
|
100
|
-
}[];
|
|
101
|
-
}>;
|
|
102
|
-
};
|
|
103
|
-
export declare const ConnectionDeleteInput: z.ZodObject<{
|
|
104
|
-
slug: z.ZodString;
|
|
105
|
-
}, z.core.$strip>;
|
|
106
|
-
export declare function createConnectionDeleteTool(api: ApiClient): {
|
|
107
|
-
name: string;
|
|
108
|
-
description: string;
|
|
109
|
-
inputSchema: z.ZodObject<{
|
|
110
|
-
slug: z.ZodString;
|
|
111
|
-
}, z.core.$strip>;
|
|
112
|
-
handler: (args: z.infer<typeof ConnectionDeleteInput>) => Promise<{
|
|
113
|
-
content: {
|
|
114
|
-
type: "text";
|
|
115
|
-
text: string;
|
|
116
|
-
}[];
|
|
117
|
-
}>;
|
|
118
|
-
};
|
|
119
|
-
export declare const ConnectionToolsInput: z.ZodObject<{
|
|
120
|
-
slug: z.ZodString;
|
|
121
|
-
}, z.core.$strip>;
|
|
122
|
-
export declare function createConnectionToolsTool(api: ApiClient): {
|
|
123
|
-
name: string;
|
|
124
|
-
description: string;
|
|
125
|
-
inputSchema: z.ZodObject<{
|
|
126
|
-
slug: z.ZodString;
|
|
127
|
-
}, z.core.$strip>;
|
|
128
|
-
handler: (args: z.infer<typeof ConnectionToolsInput>) => Promise<{
|
|
129
|
-
content: {
|
|
130
|
-
type: "text";
|
|
131
|
-
text: string;
|
|
132
|
-
}[];
|
|
133
|
-
}>;
|
|
134
|
-
};
|
|
135
|
-
export declare const ConnectionToolToggleInput: z.ZodObject<{
|
|
136
|
-
slug: z.ZodString;
|
|
137
|
-
tool: z.ZodString;
|
|
138
|
-
enabled: z.ZodBoolean;
|
|
139
|
-
}, z.core.$strip>;
|
|
140
|
-
export declare function createConnectionToolToggleTool(api: ApiClient): {
|
|
141
|
-
name: string;
|
|
142
|
-
description: string;
|
|
143
|
-
inputSchema: z.ZodObject<{
|
|
144
|
-
slug: z.ZodString;
|
|
145
|
-
tool: z.ZodString;
|
|
146
|
-
enabled: z.ZodBoolean;
|
|
147
|
-
}, z.core.$strip>;
|
|
148
|
-
handler: (args: z.infer<typeof ConnectionToolToggleInput>) => Promise<{
|
|
149
|
-
content: {
|
|
150
|
-
type: "text";
|
|
151
|
-
text: string;
|
|
152
|
-
}[];
|
|
153
|
-
}>;
|
|
154
|
-
};
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { ApiError } from '../apiClient.js';
|
|
3
|
-
/**
|
|
4
|
-
* Fremde MCP-Server anbinden, ohne das Dashboard zu oeffnen.
|
|
5
|
-
*
|
|
6
|
-
* Angesprochen wird ueber den slug und nicht ueber die Kennung: der slug ist
|
|
7
|
-
* der Name, unter dem ein Agent die Werkzeuge dieses Servers ohnehin schon
|
|
8
|
-
* sieht ("fabbrica__list_customers"), waehrend eine UUID nichts ist, was
|
|
9
|
-
* jemand im Gespraech bei sich hat. Die Kennung holt dieses Modul selbst.
|
|
10
|
-
*
|
|
11
|
-
* Zum Geheimnis: es darf mitgegeben werden, und die Beschreibung sagt, was
|
|
12
|
-
* das kostet - ein Schluessel, der als Argument durch einen Agenten laeuft,
|
|
13
|
-
* steht in dessen Verlauf. Wer das nicht will, legt die Verbindung ohne an
|
|
14
|
-
* und traegt ihn im Dashboard nach.
|
|
15
|
-
*/
|
|
16
|
-
const text = (value) => ({ content: [{ type: 'text', text: value }] });
|
|
17
|
-
const bad = (value) => ({ content: [{ type: 'text', text: value }], isError: true });
|
|
18
|
-
async function attempt(run) {
|
|
19
|
-
try {
|
|
20
|
-
return text(await run());
|
|
21
|
-
}
|
|
22
|
-
catch (e) {
|
|
23
|
-
if (e instanceof ApiError) {
|
|
24
|
-
const params = Object.keys(e.params).length ? ` ${JSON.stringify(e.params)}` : '';
|
|
25
|
-
return bad(`${e.code}${params}`);
|
|
26
|
-
}
|
|
27
|
-
return bad('errors.UNKNOWN');
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
const slug = z
|
|
31
|
-
.string()
|
|
32
|
-
.min(1)
|
|
33
|
-
.max(32)
|
|
34
|
-
.regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'errors.INVALID_SLUG');
|
|
35
|
-
/** Die eigene, private Verbindung gewinnt: privat und Team duerfen denselben slug tragen. */
|
|
36
|
-
async function bySlug(api, wanted) {
|
|
37
|
-
const { connections } = await api.listConnections();
|
|
38
|
-
const hits = connections.filter((c) => c.slug === wanted);
|
|
39
|
-
return hits.find((c) => c.scope === 'personal') ?? hits[0] ?? null;
|
|
40
|
-
}
|
|
41
|
-
function describe(c) {
|
|
42
|
-
const auth = c.authType === 'none' ? 'no auth' : `${c.authType}, secret ...${c.secretHint ?? '?'}`;
|
|
43
|
-
return `${c.slug} — ${c.name} (${c.scope}, ${c.enabled ? c.status : 'disabled'}, ${auth})\n ${c.url}${c.statusError ? `\n last error: ${c.statusError}` : ''}`;
|
|
44
|
-
}
|
|
45
|
-
export const ListConnectionsInput = z.object({});
|
|
46
|
-
export function createListConnectionsTool(api) {
|
|
47
|
-
return {
|
|
48
|
-
name: 'list_connections',
|
|
49
|
-
description: 'List the MCP servers connected through this OnlyMCP account, with the tool-name prefix each one uses.',
|
|
50
|
-
inputSchema: ListConnectionsInput,
|
|
51
|
-
handler: () => attempt(async () => {
|
|
52
|
-
const { connections } = await api.listConnections();
|
|
53
|
-
if (connections.length === 0) {
|
|
54
|
-
return 'No MCP servers are connected yet. Add one with connection_create.';
|
|
55
|
-
}
|
|
56
|
-
return connections.map(describe).join('\n');
|
|
57
|
-
}),
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
export const ConnectionCreateInput = z.object({
|
|
61
|
-
name: z.string().min(1).max(80),
|
|
62
|
-
slug,
|
|
63
|
-
url: z.string().url().max(2000),
|
|
64
|
-
transport: z.enum(['http', 'sse']).default('http'),
|
|
65
|
-
authType: z.enum(['none', 'bearer', 'header']).default('none'),
|
|
66
|
-
authHeaderName: z.string().max(80).optional(),
|
|
67
|
-
secret: z.string().max(4000).optional(),
|
|
68
|
-
teamId: z.string().max(64).optional(),
|
|
69
|
-
});
|
|
70
|
-
export function createConnectionCreateTool(api) {
|
|
71
|
-
return {
|
|
72
|
-
name: 'connection_create',
|
|
73
|
-
description: 'Connect a remote MCP server (http or sse only - a stdio server cannot be started on somebody else\'s behalf). It is probed straight away. Passing a secret here puts it into this conversation; leave it out and set it in the dashboard if that matters.',
|
|
74
|
-
inputSchema: ConnectionCreateInput,
|
|
75
|
-
handler: (args) => attempt(async () => {
|
|
76
|
-
const { connection } = await api.createConnection(args);
|
|
77
|
-
return `Connected.\n${describe(connection)}\n\nIts tools are now available as "${connection.slug}__<tool>".`;
|
|
78
|
-
}),
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
export const ConnectionUpdateInput = z.object({
|
|
82
|
-
slug,
|
|
83
|
-
name: z.string().min(1).max(80).optional(),
|
|
84
|
-
url: z.string().url().max(2000).optional(),
|
|
85
|
-
transport: z.enum(['http', 'sse']).optional(),
|
|
86
|
-
authType: z.enum(['none', 'bearer', 'header']).optional(),
|
|
87
|
-
authHeaderName: z.string().max(80).optional(),
|
|
88
|
-
secret: z.string().max(4000).optional(),
|
|
89
|
-
enabled: z.boolean().optional(),
|
|
90
|
-
});
|
|
91
|
-
export function createConnectionUpdateTool(api) {
|
|
92
|
-
return {
|
|
93
|
-
name: 'connection_update',
|
|
94
|
-
description: 'Change a connected MCP server. Only the fields you pass are touched; url, transport, authType and secret trigger a fresh probe.',
|
|
95
|
-
inputSchema: ConnectionUpdateInput,
|
|
96
|
-
handler: (args) => attempt(async () => {
|
|
97
|
-
const found = await bySlug(api, args.slug);
|
|
98
|
-
if (!found)
|
|
99
|
-
return `Connection not found: ${args.slug}`;
|
|
100
|
-
const { slug: _ignored, ...patch } = args;
|
|
101
|
-
const { connection } = await api.updateConnection(found.id, patch);
|
|
102
|
-
return `Updated.\n${describe(connection)}`;
|
|
103
|
-
}),
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
export const ConnectionDeleteInput = z.object({ slug });
|
|
107
|
-
export function createConnectionDeleteTool(api) {
|
|
108
|
-
return {
|
|
109
|
-
name: 'connection_delete',
|
|
110
|
-
description: 'Disconnect a remote MCP server and forget its stored credential. Its tools disappear from the gateway.',
|
|
111
|
-
inputSchema: ConnectionDeleteInput,
|
|
112
|
-
handler: (args) => attempt(async () => {
|
|
113
|
-
const found = await bySlug(api, args.slug);
|
|
114
|
-
if (!found)
|
|
115
|
-
return `Connection not found: ${args.slug}`;
|
|
116
|
-
await api.deleteConnection(found.id);
|
|
117
|
-
return `Disconnected ${args.slug}.`;
|
|
118
|
-
}),
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
export const ConnectionToolsInput = z.object({ slug });
|
|
122
|
-
export function createConnectionToolsTool(api) {
|
|
123
|
-
return {
|
|
124
|
-
name: 'connection_tools',
|
|
125
|
-
description: 'List what one connected server offers, and whether each tool is switched on for the gateway.',
|
|
126
|
-
inputSchema: ConnectionToolsInput,
|
|
127
|
-
handler: (args) => attempt(async () => {
|
|
128
|
-
const found = await bySlug(api, args.slug);
|
|
129
|
-
if (!found)
|
|
130
|
-
return `Connection not found: ${args.slug}`;
|
|
131
|
-
const { capabilities } = await api.listCapabilities(found.id);
|
|
132
|
-
if (capabilities.length === 0) {
|
|
133
|
-
return `${args.slug} has nothing on record yet. Its status is "${found.status}".`;
|
|
134
|
-
}
|
|
135
|
-
return capabilities
|
|
136
|
-
.map((cap) => `${cap.enabled ? '[on] ' : '[off]'} ${cap.kind} ${cap.name}${cap.exposedAs ? ` -> ${cap.exposedAs}` : ''}${cap.description ? ` — ${cap.description}` : ''}`)
|
|
137
|
-
.join('\n');
|
|
138
|
-
}),
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
export const ConnectionToolToggleInput = z.object({
|
|
142
|
-
slug,
|
|
143
|
-
tool: z.string().min(1).max(200),
|
|
144
|
-
enabled: z.boolean(),
|
|
145
|
-
});
|
|
146
|
-
export function createConnectionToolToggleTool(api) {
|
|
147
|
-
return {
|
|
148
|
-
name: 'connection_tool_toggle',
|
|
149
|
-
description: 'Switch one tool of a connected server on or off. A tool that is off costs no room in any client\'s tool list.',
|
|
150
|
-
inputSchema: ConnectionToolToggleInput,
|
|
151
|
-
handler: (args) => attempt(async () => {
|
|
152
|
-
const found = await bySlug(api, args.slug);
|
|
153
|
-
if (!found)
|
|
154
|
-
return `Connection not found: ${args.slug}`;
|
|
155
|
-
const { capabilities } = await api.listCapabilities(found.id);
|
|
156
|
-
const cap = capabilities.find((x) => x.kind === 'tool' && x.name === args.tool);
|
|
157
|
-
if (!cap)
|
|
158
|
-
return `${args.slug} offers no tool called ${args.tool}.`;
|
|
159
|
-
await api.toggleCapability(found.id, cap.id, args.enabled);
|
|
160
|
-
return `${args.slug}__${cap.name} is now ${args.enabled ? 'on' : 'off'}.`;
|
|
161
|
-
}),
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=connections.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../src/tools/connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;;;;GAYG;AAEH,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACxF,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAEtG,KAAK,UAAU,OAAO,CAAC,GAA0B;IAC/C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,IAAI,GAAG,CAAC;KACX,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,KAAK,CAAC,0BAA0B,EAAE,qBAAqB,CAAC,CAAC;AAE5D,6FAA6F;AAC7F,KAAK,UAAU,MAAM,CAAC,GAAc,EAAE,MAAc;IAClD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,CAAa;IAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,eAAe,CAAC,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;IACnG,OAAO,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,QAAQ,CAAC,CAAC,GAAG,GAClG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EACvD,EAAE,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEjD,MAAM,UAAU,yBAAyB,CAAC,GAAc;IACtD,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,uGAAuG;QACzG,WAAW,EAAE,oBAAoB;QACjC,OAAO,EAAE,GAAG,EAAE,CACZ,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;YACpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,mEAAmE,CAAC;YAC7E,CAAC;YACD,OAAO,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,IAAI;IACJ,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAClD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC9D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAEH,MAAM,UAAU,0BAA0B,CAAC,GAAc;IACvD,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,2PAA2P;QAC7P,WAAW,EAAE,qBAAqB;QAClC,OAAO,EAAE,CAAC,IAA2C,EAAE,EAAE,CACvD,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,eAAe,QAAQ,CAAC,UAAU,CAAC,uCAAuC,UAAU,CAAC,IAAI,YAAY,CAAC;QAC/G,CAAC,CAAC;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI;IACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAC1C,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IACvC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAEH,MAAM,UAAU,0BAA0B,CAAC,GAAc;IACvD,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,iIAAiI;QACnI,WAAW,EAAE,qBAAqB;QAClC,OAAO,EAAE,CAAC,IAA2C,EAAE,EAAE,CACvD,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK;gBAAE,OAAO,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC;YACxD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;YAC1C,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACnE,OAAO,aAAa,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,CAAC,CAAC;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAExD,MAAM,UAAU,0BAA0B,CAAC,GAAc;IACvD,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,wGAAwG;QAC1G,WAAW,EAAE,qBAAqB;QAClC,OAAO,EAAE,CAAC,IAA2C,EAAE,EAAE,CACvD,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK;gBAAE,OAAO,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC;YACxD,MAAM,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrC,OAAO,gBAAgB,IAAI,CAAC,IAAI,GAAG,CAAC;QACtC,CAAC,CAAC;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAEvD,MAAM,UAAU,yBAAyB,CAAC,GAAc;IACtD,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,8FAA8F;QAChG,WAAW,EAAE,oBAAoB;QACjC,OAAO,EAAE,CAAC,IAA0C,EAAE,EAAE,CACtD,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK;gBAAE,OAAO,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC;YACxD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,GAAG,IAAI,CAAC,IAAI,8CAA8C,KAAK,CAAC,MAAM,IAAI,CAAC;YACpF,CAAC;YACD,OAAO,YAAY;iBAChB,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,GACxD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAC3C,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD;iBACA,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI;IACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,UAAU,8BAA8B,CAAC,GAAc;IAC3D,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,+GAA+G;QACjH,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,CAAC,IAA+C,EAAE,EAAE,CAC3D,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK;gBAAE,OAAO,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC;YACxD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,IAAI,CAAC,GAAG;gBAAE,OAAO,GAAG,IAAI,CAAC,IAAI,0BAA0B,IAAI,CAAC,IAAI,GAAG,CAAC;YACpE,MAAM,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,WAAW,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QAC5E,CAAC,CAAC;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import type { ApiClient } from '../apiClient.js';
|
|
3
|
-
import type { TtlCache } from '../cache.js';
|
|
4
|
-
export declare const GetAgentInput: z.ZodObject<{
|
|
5
|
-
name: z.ZodString;
|
|
6
|
-
}, z.core.$strip>;
|
|
7
|
-
export declare function createGetAgentDefinitionTool(api: ApiClient, cache: TtlCache): {
|
|
8
|
-
name: string;
|
|
9
|
-
description: string;
|
|
10
|
-
inputSchema: z.ZodObject<{
|
|
11
|
-
name: z.ZodString;
|
|
12
|
-
}, z.core.$strip>;
|
|
13
|
-
handler(args: z.infer<typeof GetAgentInput>): Promise<{
|
|
14
|
-
content: {
|
|
15
|
-
type: "text";
|
|
16
|
-
text: string;
|
|
17
|
-
}[];
|
|
18
|
-
isError?: undefined;
|
|
19
|
-
} | {
|
|
20
|
-
content: {
|
|
21
|
-
type: "text";
|
|
22
|
-
text: string;
|
|
23
|
-
}[];
|
|
24
|
-
isError: boolean;
|
|
25
|
-
}>;
|
|
26
|
-
};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { ApiError } from '../apiClient.js';
|
|
3
|
-
export const GetAgentInput = z.object({ name: z.string().min(1).max(64) });
|
|
4
|
-
export function createGetAgentDefinitionTool(api, cache) {
|
|
5
|
-
return {
|
|
6
|
-
name: 'get_agent_definition',
|
|
7
|
-
description: "Delivers an agent's system prompt from the OnlyMCP cloud.",
|
|
8
|
-
inputSchema: GetAgentInput,
|
|
9
|
-
async handler(args) {
|
|
10
|
-
const key = `agent:${args.name}`;
|
|
11
|
-
const cached = await cache.get(key);
|
|
12
|
-
if (cached !== null)
|
|
13
|
-
return { content: [{ type: 'text', text: cached }] };
|
|
14
|
-
try {
|
|
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 });
|
|
19
|
-
await cache.set(key, a.body);
|
|
20
|
-
return { content: [{ type: 'text', text: a.body }] };
|
|
21
|
-
}
|
|
22
|
-
catch (e) {
|
|
23
|
-
const code = e instanceof ApiError ? e.code : 'errors.UNKNOWN';
|
|
24
|
-
return { content: [{ type: 'text', text: code }], isError: true };
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=getAgentDefinition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/tools/getSkill.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import type { ApiClient } from '../apiClient.js';
|
|
3
|
-
import type { TtlCache } from '../cache.js';
|
|
4
|
-
export declare const GetSkillInput: z.ZodObject<{
|
|
5
|
-
name: z.ZodString;
|
|
6
|
-
}, z.core.$strip>;
|
|
7
|
-
export declare function createGetSkillTool(api: ApiClient, cache: TtlCache): {
|
|
8
|
-
name: string;
|
|
9
|
-
description: string;
|
|
10
|
-
inputSchema: z.ZodObject<{
|
|
11
|
-
name: z.ZodString;
|
|
12
|
-
}, z.core.$strip>;
|
|
13
|
-
handler(args: z.infer<typeof GetSkillInput>): Promise<{
|
|
14
|
-
content: {
|
|
15
|
-
type: "text";
|
|
16
|
-
text: string;
|
|
17
|
-
}[];
|
|
18
|
-
isError?: undefined;
|
|
19
|
-
} | {
|
|
20
|
-
content: {
|
|
21
|
-
type: "text";
|
|
22
|
-
text: string;
|
|
23
|
-
}[];
|
|
24
|
-
isError: boolean;
|
|
25
|
-
}>;
|
|
26
|
-
};
|
package/dist/tools/getSkill.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { ApiError } from '../apiClient.js';
|
|
3
|
-
export const GetSkillInput = z.object({ name: z.string().min(1).max(64) });
|
|
4
|
-
export function createGetSkillTool(api, cache) {
|
|
5
|
-
return {
|
|
6
|
-
name: 'get_skill',
|
|
7
|
-
description: "Delivers a skill's full content from the OnlyMCP cloud. Called from the stub files.",
|
|
8
|
-
inputSchema: GetSkillInput,
|
|
9
|
-
async handler(args) {
|
|
10
|
-
const key = `skill:${args.name}`;
|
|
11
|
-
const cached = await cache.get(key);
|
|
12
|
-
if (cached !== null)
|
|
13
|
-
return { content: [{ type: 'text', text: cached }] };
|
|
14
|
-
try {
|
|
15
|
-
const skill = await api.getSkill(args.name);
|
|
16
|
-
await cache.set(key, skill.body);
|
|
17
|
-
return { content: [{ type: 'text', text: skill.body }] };
|
|
18
|
-
}
|
|
19
|
-
catch (e) {
|
|
20
|
-
const code = e instanceof ApiError ? e.code : 'errors.UNKNOWN';
|
|
21
|
-
return { content: [{ type: 'text', text: code }], isError: true };
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=getSkill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|