@wootsup/mcp 0.1.0-rc.1
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/CHANGELOG.md +91 -0
- package/LICENSE +21 -0
- package/README.md +179 -0
- package/SECURITY.md +163 -0
- package/dist/auth/keychain.d.ts +47 -0
- package/dist/auth/keychain.js +262 -0
- package/dist/auth/keychain.js.map +1 -0
- package/dist/auth/oauth-provider.d.ts +68 -0
- package/dist/auth/oauth-provider.js +232 -0
- package/dist/auth/oauth-provider.js.map +1 -0
- package/dist/auth/profiles.d.ts +52 -0
- package/dist/auth/profiles.js +200 -0
- package/dist/auth/profiles.js.map +1 -0
- package/dist/auth/token.d.ts +27 -0
- package/dist/auth/token.js +88 -0
- package/dist/auth/token.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +137 -0
- package/dist/index.js.map +1 -0
- package/dist/install-skill.d.ts +23 -0
- package/dist/install-skill.js +73 -0
- package/dist/install-skill.js.map +1 -0
- package/dist/modules/apimapper/cache.d.ts +2 -0
- package/dist/modules/apimapper/cache.js +71 -0
- package/dist/modules/apimapper/cache.js.map +1 -0
- package/dist/modules/apimapper/client.d.ts +85 -0
- package/dist/modules/apimapper/client.js +523 -0
- package/dist/modules/apimapper/client.js.map +1 -0
- package/dist/modules/apimapper/connections.d.ts +2 -0
- package/dist/modules/apimapper/connections.js +406 -0
- package/dist/modules/apimapper/connections.js.map +1 -0
- package/dist/modules/apimapper/credential-sanitizer.d.ts +7 -0
- package/dist/modules/apimapper/credential-sanitizer.js +70 -0
- package/dist/modules/apimapper/credential-sanitizer.js.map +1 -0
- package/dist/modules/apimapper/credentials.d.ts +2 -0
- package/dist/modules/apimapper/credentials.js +258 -0
- package/dist/modules/apimapper/credentials.js.map +1 -0
- package/dist/modules/apimapper/diagnose.d.ts +18 -0
- package/dist/modules/apimapper/diagnose.js +305 -0
- package/dist/modules/apimapper/diagnose.js.map +1 -0
- package/dist/modules/apimapper/flows.d.ts +2 -0
- package/dist/modules/apimapper/flows.js +372 -0
- package/dist/modules/apimapper/flows.js.map +1 -0
- package/dist/modules/apimapper/get-skill.d.ts +4 -0
- package/dist/modules/apimapper/get-skill.js +88 -0
- package/dist/modules/apimapper/get-skill.js.map +1 -0
- package/dist/modules/apimapper/graph-builder.d.ts +47 -0
- package/dist/modules/apimapper/graph-builder.js +117 -0
- package/dist/modules/apimapper/graph-builder.js.map +1 -0
- package/dist/modules/apimapper/graph.d.ts +2 -0
- package/dist/modules/apimapper/graph.js +117 -0
- package/dist/modules/apimapper/graph.js.map +1 -0
- package/dist/modules/apimapper/index.d.ts +2 -0
- package/dist/modules/apimapper/index.js +43 -0
- package/dist/modules/apimapper/index.js.map +1 -0
- package/dist/modules/apimapper/inspect.d.ts +20 -0
- package/dist/modules/apimapper/inspect.js +86 -0
- package/dist/modules/apimapper/inspect.js.map +1 -0
- package/dist/modules/apimapper/library.d.ts +2 -0
- package/dist/modules/apimapper/library.js +237 -0
- package/dist/modules/apimapper/library.js.map +1 -0
- package/dist/modules/apimapper/license.d.ts +2 -0
- package/dist/modules/apimapper/license.js +142 -0
- package/dist/modules/apimapper/license.js.map +1 -0
- package/dist/modules/apimapper/local-sources.d.ts +2 -0
- package/dist/modules/apimapper/local-sources.js +123 -0
- package/dist/modules/apimapper/local-sources.js.map +1 -0
- package/dist/modules/apimapper/misc.d.ts +2 -0
- package/dist/modules/apimapper/misc.js +149 -0
- package/dist/modules/apimapper/misc.js.map +1 -0
- package/dist/modules/apimapper/node-schema.d.ts +217 -0
- package/dist/modules/apimapper/node-schema.js +218 -0
- package/dist/modules/apimapper/node-schema.js.map +1 -0
- package/dist/modules/apimapper/normalizers.d.ts +13 -0
- package/dist/modules/apimapper/normalizers.js +37 -0
- package/dist/modules/apimapper/normalizers.js.map +1 -0
- package/dist/modules/apimapper/onboarding.d.ts +51 -0
- package/dist/modules/apimapper/onboarding.js +201 -0
- package/dist/modules/apimapper/onboarding.js.map +1 -0
- package/dist/modules/apimapper/schema.d.ts +2 -0
- package/dist/modules/apimapper/schema.js +84 -0
- package/dist/modules/apimapper/schema.js.map +1 -0
- package/dist/modules/apimapper/settings.d.ts +2 -0
- package/dist/modules/apimapper/settings.js +157 -0
- package/dist/modules/apimapper/settings.js.map +1 -0
- package/dist/modules/apimapper/skill-resources.d.ts +4 -0
- package/dist/modules/apimapper/skill-resources.js +85 -0
- package/dist/modules/apimapper/skill-resources.js.map +1 -0
- package/dist/modules/apimapper/types.d.ts +111 -0
- package/dist/modules/apimapper/types.js +14 -0
- package/dist/modules/apimapper/types.js.map +1 -0
- package/dist/modules/apimapper/use-profile.d.ts +34 -0
- package/dist/modules/apimapper/use-profile.js +176 -0
- package/dist/modules/apimapper/use-profile.js.map +1 -0
- package/dist/modules/apimapper/workflows.d.ts +2 -0
- package/dist/modules/apimapper/workflows.js +301 -0
- package/dist/modules/apimapper/workflows.js.map +1 -0
- package/dist/platform/index.d.ts +71 -0
- package/dist/platform/index.js +377 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/server-http.d.ts +22 -0
- package/dist/server-http.js +159 -0
- package/dist/server-http.js.map +1 -0
- package/dist/setup/detect-clients.d.ts +39 -0
- package/dist/setup/detect-clients.js +152 -0
- package/dist/setup/detect-clients.js.map +1 -0
- package/dist/setup/probe-handshake.d.ts +26 -0
- package/dist/setup/probe-handshake.js +159 -0
- package/dist/setup/probe-handshake.js.map +1 -0
- package/dist/setup/write-config.d.ts +25 -0
- package/dist/setup/write-config.js +247 -0
- package/dist/setup/write-config.js.map +1 -0
- package/dist/setup-cli.d.ts +49 -0
- package/dist/setup-cli.js +292 -0
- package/dist/setup-cli.js.map +1 -0
- package/dist/skill-instructions.d.ts +10 -0
- package/dist/skill-instructions.js +68 -0
- package/dist/skill-instructions.js.map +1 -0
- package/dist/transports/http.d.ts +29 -0
- package/dist/transports/http.js +267 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/stdio.d.ts +9 -0
- package/dist/transports/stdio.js +19 -0
- package/dist/transports/stdio.js.map +1 -0
- package/docs/architecture.md +140 -0
- package/docs/customgraph-internal-migration.md +210 -0
- package/docs/security.md +126 -0
- package/docs/tools.md +230 -0
- package/manifest.json +76 -0
- package/package.json +61 -0
- package/skills/apimapper/SKILL.md +57 -0
- package/skills/apimapper/reference/joomla.md +85 -0
- package/skills/apimapper/reference/oauth.md +94 -0
- package/skills/apimapper/reference/troubleshooting.md +123 -0
- package/skills/apimapper/reference/yootheme.md +96 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatResult, autoFormatTable, readOnly, creating, destructive, } from "@getimo/mcp-toolkit";
|
|
3
|
+
import { request, hintFor } from "./client.js";
|
|
4
|
+
export function registerLibraryTools(server) {
|
|
5
|
+
// ── apimapper_library_list ─────────────────────────────────────────
|
|
6
|
+
server.registerTool("apimapper_library_list", {
|
|
7
|
+
title: "List Library Items",
|
|
8
|
+
description: "List all library items (connection templates) shipping with API Mapper." +
|
|
9
|
+
"\n\nExample:\n apimapper_library_list({ category: 'media' })",
|
|
10
|
+
inputSchema: {
|
|
11
|
+
category: z.string().optional().describe('Filter by category slug (use apimapper_library_categories)'),
|
|
12
|
+
provider: z.string().optional().describe('Filter by provider (e.g., "google", "meta")'),
|
|
13
|
+
activated: z.enum(["any", "yes", "no"]).default("any").describe("Filter by activation status"),
|
|
14
|
+
search: z.string().optional().describe("Free-text search"),
|
|
15
|
+
page: z.number().min(1).default(1).describe("Pagination page (1-based)"),
|
|
16
|
+
limit: z.number().min(1).max(500).default(100).describe("Max items (1-500)"),
|
|
17
|
+
},
|
|
18
|
+
annotations: readOnly(),
|
|
19
|
+
}, async ({ category, provider, activated, search, page, limit }) => {
|
|
20
|
+
const params = new URLSearchParams();
|
|
21
|
+
if (category)
|
|
22
|
+
params.set("category", category);
|
|
23
|
+
if (search)
|
|
24
|
+
params.set("search", search);
|
|
25
|
+
params.set("page", String(page));
|
|
26
|
+
params.set("limit", String(limit));
|
|
27
|
+
const r = await request(`/library?${params.toString()}`);
|
|
28
|
+
if (!r.success) {
|
|
29
|
+
return formatResult({
|
|
30
|
+
error: r.error,
|
|
31
|
+
status: r.status,
|
|
32
|
+
errorCode: r.errorCode,
|
|
33
|
+
context: { category, provider, activated, search, page, limit },
|
|
34
|
+
hint: hintFor(r.errorCode),
|
|
35
|
+
}, true);
|
|
36
|
+
}
|
|
37
|
+
let items = Array.isArray(r.data?.items) ? r.data.items : [];
|
|
38
|
+
if (provider)
|
|
39
|
+
items = items.filter((i) => i.provider === provider);
|
|
40
|
+
if (activated === "yes")
|
|
41
|
+
items = items.filter((i) => i.is_activated);
|
|
42
|
+
if (activated === "no")
|
|
43
|
+
items = items.filter((i) => !i.is_activated);
|
|
44
|
+
return autoFormatTable(items.map((i) => ({
|
|
45
|
+
id: i.id,
|
|
46
|
+
name: i.name,
|
|
47
|
+
provider: i.provider || "—",
|
|
48
|
+
category: i.category || "—",
|
|
49
|
+
activated: i.is_activated ? "✓" : "✗",
|
|
50
|
+
})), {
|
|
51
|
+
columns: [
|
|
52
|
+
{ key: "id", label: "ID", width: 28 },
|
|
53
|
+
{ key: "name", label: "NAME", width: 32 },
|
|
54
|
+
{ key: "provider", label: "PROVIDER", width: 14 },
|
|
55
|
+
{ key: "category", label: "CATEGORY", width: 14 },
|
|
56
|
+
{ key: "activated", label: "ACT", width: 4 },
|
|
57
|
+
],
|
|
58
|
+
header: (n) => `${n} library items (page ${page})`,
|
|
59
|
+
footer: "Use apimapper_library_connection_detail <id> for template config.",
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
// ── apimapper_library_categories ───────────────────────────────────
|
|
63
|
+
server.registerTool("apimapper_library_categories", {
|
|
64
|
+
title: "List Library Categories",
|
|
65
|
+
description: "Fetch all library category slugs + counts." +
|
|
66
|
+
"\n\nExample:\n apimapper_library_categories({})",
|
|
67
|
+
inputSchema: {},
|
|
68
|
+
annotations: readOnly(),
|
|
69
|
+
}, async () => {
|
|
70
|
+
const r = await request("/library/categories");
|
|
71
|
+
if (!r.success) {
|
|
72
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: {}, hint: hintFor(r.errorCode) }, true);
|
|
73
|
+
}
|
|
74
|
+
const cats = Array.isArray(r.data?.categories) ? r.data.categories : [];
|
|
75
|
+
return formatResult({ count: cats.length, categories: cats }, false, { maxChars: 3000 });
|
|
76
|
+
});
|
|
77
|
+
// ── apimapper_library_featured ─────────────────────────────────────
|
|
78
|
+
server.registerTool("apimapper_library_featured", {
|
|
79
|
+
title: "List Featured Library Items",
|
|
80
|
+
description: "Fetch curated/featured library items shown on the catalog landing." +
|
|
81
|
+
"\n\nExample:\n apimapper_library_featured({})",
|
|
82
|
+
inputSchema: {
|
|
83
|
+
limit: z.number().min(1).max(100).default(12).describe("Max items (1-100)"),
|
|
84
|
+
},
|
|
85
|
+
annotations: readOnly(),
|
|
86
|
+
}, async ({ limit }) => {
|
|
87
|
+
const params = new URLSearchParams({ limit: String(limit) });
|
|
88
|
+
const r = await request(`/library/featured?${params.toString()}`);
|
|
89
|
+
if (!r.success) {
|
|
90
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { limit }, hint: hintFor(r.errorCode) }, true);
|
|
91
|
+
}
|
|
92
|
+
const items = Array.isArray(r.data?.items) ? r.data.items : [];
|
|
93
|
+
return formatResult({ count: items.length, items }, false, { maxChars: 4000 });
|
|
94
|
+
});
|
|
95
|
+
// ── apimapper_library_popular ──────────────────────────────────────
|
|
96
|
+
server.registerTool("apimapper_library_popular", {
|
|
97
|
+
title: "List Popular Library Items",
|
|
98
|
+
description: "Fetch most-activated library items." +
|
|
99
|
+
"\n\nExample:\n apimapper_library_popular({})",
|
|
100
|
+
inputSchema: {
|
|
101
|
+
limit: z.number().min(1).max(100).default(12).describe("Max items (1-100)"),
|
|
102
|
+
},
|
|
103
|
+
annotations: readOnly(),
|
|
104
|
+
}, async ({ limit }) => {
|
|
105
|
+
const params = new URLSearchParams({ limit: String(limit) });
|
|
106
|
+
const r = await request(`/library/popular?${params.toString()}`);
|
|
107
|
+
if (!r.success) {
|
|
108
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { limit }, hint: hintFor(r.errorCode) }, true);
|
|
109
|
+
}
|
|
110
|
+
const items = Array.isArray(r.data?.items) ? r.data.items : [];
|
|
111
|
+
return formatResult({ count: items.length, items }, false, { maxChars: 4000 });
|
|
112
|
+
});
|
|
113
|
+
// ── apimapper_library_catalog ──────────────────────────────────────
|
|
114
|
+
server.registerTool("apimapper_library_catalog", {
|
|
115
|
+
title: "Get Full Library Catalog",
|
|
116
|
+
description: "Fetch the entire library catalog (all categories + items + featured/popular in one shot). " +
|
|
117
|
+
"Heavy — use filtered endpoints for narrower queries." +
|
|
118
|
+
"\n\nExample:\n apimapper_library_catalog({})",
|
|
119
|
+
inputSchema: {},
|
|
120
|
+
annotations: readOnly(),
|
|
121
|
+
}, async () => {
|
|
122
|
+
const r = await request("/library/catalog");
|
|
123
|
+
if (!r.success) {
|
|
124
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: {}, hint: hintFor(r.errorCode) }, true);
|
|
125
|
+
}
|
|
126
|
+
return formatResult(r.data ?? {}, false, { maxChars: 8000 });
|
|
127
|
+
});
|
|
128
|
+
// ── apimapper_library_connection_detail ────────────────────────────
|
|
129
|
+
server.registerTool("apimapper_library_connection_detail", {
|
|
130
|
+
title: "Get Library Connection Template Detail",
|
|
131
|
+
description: "Fetch the full connection template (endpoints, default_params, auth scheme) for one library item." +
|
|
132
|
+
"\n\nExample:\n apimapper_library_connection_detail({ id: 'pexels' })",
|
|
133
|
+
inputSchema: {
|
|
134
|
+
id: z.string().describe("Library item ID. Use apimapper_library_list to find."),
|
|
135
|
+
},
|
|
136
|
+
annotations: readOnly(),
|
|
137
|
+
}, async ({ id }) => {
|
|
138
|
+
const r = await request(`/library/connections/${encodeURIComponent(id)}`);
|
|
139
|
+
if (!r.success) {
|
|
140
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { id }, hint: hintFor(r.errorCode) }, true);
|
|
141
|
+
}
|
|
142
|
+
if (!r.data || (typeof r.data === "object" && Object.keys(r.data).length === 0)) {
|
|
143
|
+
return formatResult({ error: "library item not found", status: r.status, context: { id }, hint: hintFor("not_found") }, true);
|
|
144
|
+
}
|
|
145
|
+
return formatResult(r.data, false, { maxChars: 8000 });
|
|
146
|
+
});
|
|
147
|
+
// ── apimapper_library_activated ────────────────────────────────────
|
|
148
|
+
server.registerTool("apimapper_library_activated", {
|
|
149
|
+
title: "List Activated Library Items",
|
|
150
|
+
description: "List library items the user has activated (= has a connection for)." +
|
|
151
|
+
"\n\nExample:\n apimapper_library_activated({})",
|
|
152
|
+
inputSchema: {},
|
|
153
|
+
annotations: readOnly(),
|
|
154
|
+
}, async () => {
|
|
155
|
+
const r = await request("/library/activated");
|
|
156
|
+
if (!r.success) {
|
|
157
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: {}, hint: hintFor(r.errorCode) }, true);
|
|
158
|
+
}
|
|
159
|
+
const items = Array.isArray(r.data?.items) ? r.data.items : [];
|
|
160
|
+
return formatResult({ count: items.length, items }, false, { maxChars: 4000 });
|
|
161
|
+
});
|
|
162
|
+
// ── apimapper_library_activate ─────────────────────────────────────
|
|
163
|
+
server.registerTool("apimapper_library_activate", {
|
|
164
|
+
title: "Activate Library Template",
|
|
165
|
+
description: "Activate a library template — creates a new connection. REST contract: " +
|
|
166
|
+
"`extra_fields` (template placeholder values) + optional `library_connection` (template metadata override)." +
|
|
167
|
+
"\n\nExample:\n apimapper_library_activate({ id: 'pexels', extra_fields: { api_key: 'a1b2c3d4...' } })",
|
|
168
|
+
inputSchema: {
|
|
169
|
+
id: z.string().describe("Library item ID. Use apimapper_library_list to find."),
|
|
170
|
+
credential_id: z.string().optional().describe("Credential ID to link (required for auth-protected templates)"),
|
|
171
|
+
extra_fields: z
|
|
172
|
+
.record(z.string(), z.unknown())
|
|
173
|
+
.optional()
|
|
174
|
+
.describe('Template placeholder values (e.g., {"spreadsheet_id":"...","user_uri":"..."}). REST key: extra_fields.'),
|
|
175
|
+
library_connection: z
|
|
176
|
+
.record(z.string(), z.unknown())
|
|
177
|
+
.optional()
|
|
178
|
+
.describe('Optional template metadata override (rename connection, override base_url, etc.). ' +
|
|
179
|
+
'REST key: library_connection.'),
|
|
180
|
+
},
|
|
181
|
+
annotations: creating(),
|
|
182
|
+
}, async ({ id, credential_id, extra_fields, library_connection }) => {
|
|
183
|
+
const body = {};
|
|
184
|
+
if (credential_id)
|
|
185
|
+
body.credential_id = credential_id;
|
|
186
|
+
if (extra_fields)
|
|
187
|
+
body.extra_fields = extra_fields;
|
|
188
|
+
if (library_connection)
|
|
189
|
+
body.library_connection = library_connection;
|
|
190
|
+
const r = await request(`/library/${encodeURIComponent(id)}/activate`, {
|
|
191
|
+
method: "POST",
|
|
192
|
+
body: JSON.stringify(body),
|
|
193
|
+
});
|
|
194
|
+
if (!r.success) {
|
|
195
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { id }, hint: hintFor(r.errorCode) }, true);
|
|
196
|
+
}
|
|
197
|
+
const dataObj = r.data && typeof r.data === "object" ? r.data : {};
|
|
198
|
+
return formatResult({
|
|
199
|
+
activated: true,
|
|
200
|
+
id,
|
|
201
|
+
connection_id: dataObj.connection_id || dataObj.connectionId || null,
|
|
202
|
+
note: "Connection created; use apimapper_connection_list to find the new id.",
|
|
203
|
+
}, false, { maxChars: 3000 });
|
|
204
|
+
});
|
|
205
|
+
// ── apimapper_library_deactivate ───────────────────────────────────
|
|
206
|
+
server.registerTool("apimapper_library_deactivate", {
|
|
207
|
+
title: "Deactivate Library Template",
|
|
208
|
+
description: "Deactivate a library template — deletes the underlying connection. " +
|
|
209
|
+
"Any flow referencing it will break." +
|
|
210
|
+
"\n\nExample:\n apimapper_library_deactivate({ id: 'pexels', confirm: false })",
|
|
211
|
+
inputSchema: {
|
|
212
|
+
id: z.string().describe("Library item ID. Use apimapper_library_activated."),
|
|
213
|
+
confirm: z
|
|
214
|
+
.boolean()
|
|
215
|
+
.default(false)
|
|
216
|
+
.describe("Must be true to execute. Ask user for confirmation first."),
|
|
217
|
+
},
|
|
218
|
+
annotations: destructive(),
|
|
219
|
+
}, async ({ id, confirm }) => {
|
|
220
|
+
if (!confirm) {
|
|
221
|
+
return formatResult({
|
|
222
|
+
preview: true,
|
|
223
|
+
warning: "DESTRUCTIVE — Deactivate removes the connection. Dependent flows will break.",
|
|
224
|
+
target: { id, operation: "deactivate" },
|
|
225
|
+
instruction: "Ask user to confirm, then call again with confirm: true.",
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
const r = await request(`/library/${encodeURIComponent(id)}/activate`, {
|
|
229
|
+
method: "DELETE",
|
|
230
|
+
});
|
|
231
|
+
if (!r.success) {
|
|
232
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { id }, hint: hintFor(r.errorCode) }, true);
|
|
233
|
+
}
|
|
234
|
+
return formatResult({ deactivated: true, id }, false, { maxChars: 1500 });
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/modules/apimapper/library.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatResult, readOnly, creating, mutating, destructive, } from "@getimo/mcp-toolkit";
|
|
3
|
+
import { request, hintFor } from "./client.js";
|
|
4
|
+
function mapLicense(d) {
|
|
5
|
+
if (!d || typeof d !== "object")
|
|
6
|
+
return {};
|
|
7
|
+
const o = d;
|
|
8
|
+
return {
|
|
9
|
+
status: typeof o.status === "string" ? o.status : undefined,
|
|
10
|
+
tier: typeof o.tier === "string" ? o.tier : undefined,
|
|
11
|
+
expires_at: typeof o.expires_at === "string" ? o.expires_at : null,
|
|
12
|
+
beta_channel: typeof o.beta_channel === "boolean" ? o.beta_channel : undefined,
|
|
13
|
+
features: typeof o.features === "object" && o.features ? o.features : undefined,
|
|
14
|
+
activation_count: typeof o.activation_count === "number" ? o.activation_count : undefined,
|
|
15
|
+
max_activations: typeof o.max_activations === "number" ? o.max_activations : undefined,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function registerLicenseTools(server) {
|
|
19
|
+
// ── apimapper_license_status ───────────────────────────────────────
|
|
20
|
+
server.registerTool("apimapper_license_status", {
|
|
21
|
+
title: "Get License Status",
|
|
22
|
+
description: "Fetch the current license tier, expiry, beta-channel state, and feature flags." +
|
|
23
|
+
"\n\nExample:\n apimapper_license_status({})",
|
|
24
|
+
inputSchema: {},
|
|
25
|
+
annotations: readOnly(),
|
|
26
|
+
}, async () => {
|
|
27
|
+
const r = await request("/license");
|
|
28
|
+
if (!r.success) {
|
|
29
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: {}, hint: hintFor(r.errorCode) }, true);
|
|
30
|
+
}
|
|
31
|
+
return formatResult(mapLicense(r.data), false, { maxChars: 3000 });
|
|
32
|
+
});
|
|
33
|
+
// ── apimapper_license_activate ─────────────────────────────────────
|
|
34
|
+
server.registerTool("apimapper_license_activate", {
|
|
35
|
+
title: "Activate License",
|
|
36
|
+
description: "Activate the API Mapper plugin with a license key." +
|
|
37
|
+
"\n\nExample:\n apimapper_license_activate({ key: 'AM-PRO-XXXXXX-XXXXXX' })",
|
|
38
|
+
inputSchema: {
|
|
39
|
+
license_key: z.string().min(8).describe('License key (e.g., "AM-XXXX-XXXX-XXXX-XXXX")'),
|
|
40
|
+
email: z.string().email().optional().describe("Account email associated with the key"),
|
|
41
|
+
},
|
|
42
|
+
annotations: creating(),
|
|
43
|
+
}, async ({ license_key, email }) => {
|
|
44
|
+
const r = await request("/license/activate", { method: "POST", body: JSON.stringify({ license_key, email }) }, { unwrapInnerSuccess: true });
|
|
45
|
+
if (!r.success) {
|
|
46
|
+
return formatResult({
|
|
47
|
+
error: r.error,
|
|
48
|
+
status: r.status,
|
|
49
|
+
errorCode: r.errorCode,
|
|
50
|
+
payloadFailed: r.payloadFailed,
|
|
51
|
+
context: { email },
|
|
52
|
+
hint: r.payloadFailed
|
|
53
|
+
? "License-server rejected the key. Verify the key + email pairing and activation slots."
|
|
54
|
+
: hintFor(r.errorCode),
|
|
55
|
+
}, true);
|
|
56
|
+
}
|
|
57
|
+
return formatResult({ activated: true, ...mapLicense(r.data) }, false, { maxChars: 2500 });
|
|
58
|
+
});
|
|
59
|
+
// ── apimapper_license_deactivate ───────────────────────────────────
|
|
60
|
+
server.registerTool("apimapper_license_deactivate", {
|
|
61
|
+
title: "Deactivate License",
|
|
62
|
+
description: "Deactivate the license, freeing the activation slot. Plugin reverts to Free tier." +
|
|
63
|
+
"\n\nExample:\n apimapper_license_deactivate({ confirm: false })",
|
|
64
|
+
inputSchema: {
|
|
65
|
+
confirm: z
|
|
66
|
+
.boolean()
|
|
67
|
+
.default(false)
|
|
68
|
+
.describe("Must be true to execute. Ask user for confirmation first."),
|
|
69
|
+
},
|
|
70
|
+
annotations: destructive(),
|
|
71
|
+
}, async ({ confirm }) => {
|
|
72
|
+
if (!confirm) {
|
|
73
|
+
return formatResult({
|
|
74
|
+
preview: true,
|
|
75
|
+
warning: "DESTRUCTIVE — License deactivation reverts plugin to Free tier (loses Pro features).",
|
|
76
|
+
target: { operation: "deactivate" },
|
|
77
|
+
instruction: "Ask user to confirm, then call again with confirm: true.",
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const r = await request("/license/deactivate", { method: "POST" });
|
|
81
|
+
if (!r.success) {
|
|
82
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: {}, hint: hintFor(r.errorCode) }, true);
|
|
83
|
+
}
|
|
84
|
+
return formatResult({ deactivated: true, ...mapLicense(r.data) }, false, { maxChars: 2000 });
|
|
85
|
+
});
|
|
86
|
+
// ── apimapper_license_revalidate ───────────────────────────────────
|
|
87
|
+
server.registerTool("apimapper_license_revalidate", {
|
|
88
|
+
title: "Revalidate License",
|
|
89
|
+
description: "Force a fresh validation call to the license server (network round-trip)." +
|
|
90
|
+
"\n\nExample:\n apimapper_license_revalidate({})",
|
|
91
|
+
inputSchema: {},
|
|
92
|
+
annotations: mutating(),
|
|
93
|
+
}, async () => {
|
|
94
|
+
const r = await request("/license/revalidate", { method: "POST" }, { unwrapInnerSuccess: true });
|
|
95
|
+
if (!r.success) {
|
|
96
|
+
return formatResult({
|
|
97
|
+
error: r.error,
|
|
98
|
+
status: r.status,
|
|
99
|
+
errorCode: r.errorCode,
|
|
100
|
+
payloadFailed: r.payloadFailed,
|
|
101
|
+
context: {},
|
|
102
|
+
hint: hintFor(r.errorCode),
|
|
103
|
+
}, true);
|
|
104
|
+
}
|
|
105
|
+
return formatResult({ revalidated: true, ...mapLicense(r.data) }, false, { maxChars: 2500 });
|
|
106
|
+
});
|
|
107
|
+
// ── apimapper_license_refresh ──────────────────────────────────────
|
|
108
|
+
server.registerTool("apimapper_license_refresh", {
|
|
109
|
+
title: "Refresh License Cache",
|
|
110
|
+
description: "Refresh the local cache of the license response (no upstream call — faster than revalidate). " +
|
|
111
|
+
"Use after manually editing the license_key field." +
|
|
112
|
+
"\n\nExample:\n apimapper_license_refresh({})",
|
|
113
|
+
inputSchema: {},
|
|
114
|
+
annotations: mutating(),
|
|
115
|
+
}, async () => {
|
|
116
|
+
const r = await request("/license/refresh", { method: "POST" });
|
|
117
|
+
if (!r.success) {
|
|
118
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: {}, hint: hintFor(r.errorCode) }, true);
|
|
119
|
+
}
|
|
120
|
+
return formatResult({ refreshed: true, ...mapLicense(r.data) }, false, { maxChars: 2500 });
|
|
121
|
+
});
|
|
122
|
+
// ── apimapper_license_beta_channel ─────────────────────────────────
|
|
123
|
+
server.registerTool("apimapper_license_beta_channel", {
|
|
124
|
+
title: "Toggle Beta Channel",
|
|
125
|
+
description: "Enable/disable the beta release channel for this license." +
|
|
126
|
+
"\n\nExample:\n apimapper_license_beta_channel({ enabled: true })",
|
|
127
|
+
inputSchema: {
|
|
128
|
+
enabled: z.boolean().describe("true to opt-in to beta releases, false to revert to stable"),
|
|
129
|
+
},
|
|
130
|
+
annotations: mutating(),
|
|
131
|
+
}, async ({ enabled }) => {
|
|
132
|
+
const r = await request("/license/beta-channel", {
|
|
133
|
+
method: "POST",
|
|
134
|
+
body: JSON.stringify({ enabled }),
|
|
135
|
+
});
|
|
136
|
+
if (!r.success) {
|
|
137
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { enabled }, hint: hintFor(r.errorCode) }, true);
|
|
138
|
+
}
|
|
139
|
+
return formatResult({ updated: true, beta_channel: enabled, ...mapLicense(r.data) }, false, { maxChars: 2500 });
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=license.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../../src/modules/apimapper/license.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG/C,SAAS,UAAU,CAAC,CAAU;IAC5B,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC3D,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACrD,UAAU,EAAE,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QAClE,YAAY,EAAE,OAAO,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAC9E,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,QAAoC,CAAC,CAAC,CAAC,SAAS;QAC5G,gBAAgB,EAAE,OAAO,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;QACzF,eAAe,EAAE,OAAO,CAAC,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;KACvF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,gFAAgF;YAC7F,8CAA8C;QAC9C,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,GAAG,MAAM,OAAO,CAAU,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EACrG,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,oDAAoD;YACjE,6EAA6E;QAC7E,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;SACvF;QACD,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/B,MAAM,CAAC,GAAG,MAAM,OAAO,CACrB,mBAAmB,EACnB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAChE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAC7B,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,YAAY,CACjB;gBACE,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,aAAa,EAAE,CAAC,CAAC,aAAa;gBAC9B,OAAO,EAAE,EAAE,KAAK,EAAE;gBAClB,IAAI,EAAE,CAAC,CAAC,aAAa;oBACnB,CAAC,CAAC,uFAAuF;oBACzF,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;aACzB,EACD,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CACjB,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAC1C,KAAK,EACL,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,mFAAmF;YAChG,kEAAkE;QAClE,WAAW,EAAE;YACX,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,2DAA2D,CAAC;SACzE;QACD,WAAW,EAAE,WAAW,EAAE;KAC3B,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,YAAY,CAAC;gBAClB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,sFAAsF;gBAC/F,MAAM,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;gBACnC,WAAW,EAAE,0DAA0D;aACxE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAU,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EACrG,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,2EAA2E;YACxF,kDAAkD;QAClD,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,GAAG,MAAM,OAAO,CACrB,qBAAqB,EACrB,EAAE,MAAM,EAAE,MAAM,EAAE,EAClB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAC7B,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,YAAY,CACjB;gBACE,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,aAAa,EAAE,CAAC,CAAC,aAAa;gBAC9B,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;aAC3B,EACD,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,+FAA+F;YAC/F,mDAAmD;YACnD,+CAA+C;QACjD,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,GAAG,MAAM,OAAO,CAAU,kBAAkB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EACrG,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7F,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,gCAAgC,EAChC;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,2DAA2D;YACxE,mEAAmE;QACnE,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;SAC5F;QACD,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,CAAC,GAAG,MAAM,OAAO,CAAU,uBAAuB,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAC9G,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CACjB,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAC/D,KAAK,EACL,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatResult, readOnly } from "@getimo/mcp-toolkit";
|
|
3
|
+
import { request, hintFor } from "./client.js";
|
|
4
|
+
import { encodePathPreservingSlashes } from "./normalizers.js";
|
|
5
|
+
export function registerLocalSourceTools(server) {
|
|
6
|
+
// ── apimapper_local_source_types ───────────────────────────────────
|
|
7
|
+
server.registerTool("apimapper_local_source_types", {
|
|
8
|
+
title: "List Local Source Types",
|
|
9
|
+
description: "List available local-source types (e.g., wordpress/posts, wordpress/users, joomla/articles). " +
|
|
10
|
+
"Local sources don't need a connection — they query WP/Joomla internal data." +
|
|
11
|
+
"\n\nExample:\n apimapper_local_source_types({})",
|
|
12
|
+
inputSchema: {},
|
|
13
|
+
annotations: readOnly(),
|
|
14
|
+
}, async () => {
|
|
15
|
+
const r = await request("/local-sources/types");
|
|
16
|
+
if (!r.success) {
|
|
17
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: {}, hint: hintFor(r.errorCode) }, true);
|
|
18
|
+
}
|
|
19
|
+
const types = Array.isArray(r.data?.types) ? r.data.types : [];
|
|
20
|
+
return formatResult({ count: types.length, types }, false, { maxChars: 4000 });
|
|
21
|
+
});
|
|
22
|
+
// ── apimapper_local_source_schema ──────────────────────────────────
|
|
23
|
+
server.registerTool("apimapper_local_source_schema", {
|
|
24
|
+
title: "Get Local Source Schema",
|
|
25
|
+
description: "Fetch field schema for a local-source type (e.g., wordpress/posts)." +
|
|
26
|
+
"\n\nExample:\n apimapper_local_source_schema({ type: 'wordpress/posts' })",
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type_id: z
|
|
29
|
+
.string()
|
|
30
|
+
.regex(/^[a-z]+\/[a-z0-9_-]+$/, "Must be in the form 'platform/type', e.g., 'wordpress/posts'")
|
|
31
|
+
.describe('Local source type id in "platform/type" form (e.g., "wordpress/posts", "joomla/articles"). Use apimapper_local_source_types.'),
|
|
32
|
+
},
|
|
33
|
+
annotations: readOnly(),
|
|
34
|
+
}, async ({ type_id }) => {
|
|
35
|
+
const r = await request(`/local-sources/schema/${encodePathPreservingSlashes(type_id)}`);
|
|
36
|
+
if (!r.success) {
|
|
37
|
+
return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { type_id }, hint: hintFor(r.errorCode) }, true);
|
|
38
|
+
}
|
|
39
|
+
return formatResult(r.data ?? {}, false, { maxChars: 4000 });
|
|
40
|
+
});
|
|
41
|
+
// ── apimapper_local_source_filter_options ──────────────────────────
|
|
42
|
+
server.registerTool("apimapper_local_source_filter_options", {
|
|
43
|
+
title: "Get Filter Options",
|
|
44
|
+
description: "Fetch dropdown options for a filter on a local source (e.g., available categories/tags)." +
|
|
45
|
+
"\n\nExample:\n apimapper_local_source_filter_options({ type: 'wordpress/posts', field: 'category' })",
|
|
46
|
+
inputSchema: {
|
|
47
|
+
type_id: z
|
|
48
|
+
.string()
|
|
49
|
+
.regex(/^[a-z]+\/[a-z0-9_-]+$/, "Must be 'platform/type' form")
|
|
50
|
+
.describe('Local source type id in "platform/type" form. Use apimapper_local_source_types.'),
|
|
51
|
+
filter_name: z
|
|
52
|
+
.string()
|
|
53
|
+
.regex(/^[a-z_]+$/, "Must be lowercase with underscores")
|
|
54
|
+
.describe('Filter field name (e.g., "category", "tag", "author")'),
|
|
55
|
+
},
|
|
56
|
+
annotations: readOnly(),
|
|
57
|
+
}, async ({ type_id, filter_name }) => {
|
|
58
|
+
const r = await request(`/local-sources/filter-options/${encodePathPreservingSlashes(type_id)}/${encodeURIComponent(filter_name)}`);
|
|
59
|
+
if (!r.success) {
|
|
60
|
+
return formatResult({
|
|
61
|
+
error: r.error,
|
|
62
|
+
status: r.status,
|
|
63
|
+
errorCode: r.errorCode,
|
|
64
|
+
context: { type_id, filter_name },
|
|
65
|
+
hint: hintFor(r.errorCode),
|
|
66
|
+
}, true);
|
|
67
|
+
}
|
|
68
|
+
return formatResult(r.data ?? {}, false, { maxChars: 4000 });
|
|
69
|
+
});
|
|
70
|
+
// ── apimapper_local_source_query ───────────────────────────────────
|
|
71
|
+
server.registerTool("apimapper_local_source_query", {
|
|
72
|
+
title: "Query Local Source Data",
|
|
73
|
+
description: "Execute a query against a local source and return data. Body uses camelCase " +
|
|
74
|
+
"`contentType` (FlowExecutor node-data convention)." +
|
|
75
|
+
"\n\nExample:\n apimapper_local_source_query({ contentType: 'wordpress/posts', limit: 10 })",
|
|
76
|
+
inputSchema: {
|
|
77
|
+
content_type: z
|
|
78
|
+
.string()
|
|
79
|
+
.regex(/^[a-z]+\/[a-z0-9_-]+$/, "Must be 'platform/type' form")
|
|
80
|
+
.describe('Content type in "platform/type" form (e.g., "wordpress/posts"). Use apimapper_local_source_types.'),
|
|
81
|
+
filters: z
|
|
82
|
+
.record(z.string(), z.unknown())
|
|
83
|
+
.optional()
|
|
84
|
+
.describe('Filter values (e.g., {"category":"news","status":"publish"})'),
|
|
85
|
+
limit: z.number().min(1).max(500).default(50).describe("Max items (1-500)"),
|
|
86
|
+
offset: z.number().min(0).default(0).describe("Offset for pagination"),
|
|
87
|
+
orderby: z.string().optional().describe('Order field (e.g., "date","title")'),
|
|
88
|
+
order: z.enum(["asc", "desc"]).default("desc").describe("Order direction"),
|
|
89
|
+
},
|
|
90
|
+
annotations: readOnly(),
|
|
91
|
+
}, async ({ content_type, filters, limit, offset, orderby, order }) => {
|
|
92
|
+
const body = {
|
|
93
|
+
contentType: content_type, // camelCase wire-format key
|
|
94
|
+
limit,
|
|
95
|
+
offset,
|
|
96
|
+
order,
|
|
97
|
+
};
|
|
98
|
+
if (filters)
|
|
99
|
+
body.filters = filters;
|
|
100
|
+
if (orderby)
|
|
101
|
+
body.orderby = orderby;
|
|
102
|
+
const r = await request("/local-sources/query", { method: "POST", body: JSON.stringify(body) });
|
|
103
|
+
if (!r.success) {
|
|
104
|
+
return formatResult({
|
|
105
|
+
error: r.error,
|
|
106
|
+
status: r.status,
|
|
107
|
+
errorCode: r.errorCode,
|
|
108
|
+
context: { content_type, limit, offset },
|
|
109
|
+
hint: hintFor(r.errorCode),
|
|
110
|
+
}, true);
|
|
111
|
+
}
|
|
112
|
+
const items = Array.isArray(r.data?.items) ? r.data.items : [];
|
|
113
|
+
return formatResult({
|
|
114
|
+
ok: true,
|
|
115
|
+
content_type,
|
|
116
|
+
total: r.data?.total ?? items.length,
|
|
117
|
+
returned: items.length,
|
|
118
|
+
items: items.slice(0, 50),
|
|
119
|
+
note: items.length > 50 ? `Showing first 50 of ${items.length} items.` : undefined,
|
|
120
|
+
}, false, { maxChars: 6000 });
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=local-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-sources.js","sourceRoot":"","sources":["../../../src/modules/apimapper/local-sources.ts"],"names":[],"mappings":"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"}
|