@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.
Files changed (135) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/LICENSE +21 -0
  3. package/README.md +179 -0
  4. package/SECURITY.md +163 -0
  5. package/dist/auth/keychain.d.ts +47 -0
  6. package/dist/auth/keychain.js +262 -0
  7. package/dist/auth/keychain.js.map +1 -0
  8. package/dist/auth/oauth-provider.d.ts +68 -0
  9. package/dist/auth/oauth-provider.js +232 -0
  10. package/dist/auth/oauth-provider.js.map +1 -0
  11. package/dist/auth/profiles.d.ts +52 -0
  12. package/dist/auth/profiles.js +200 -0
  13. package/dist/auth/profiles.js.map +1 -0
  14. package/dist/auth/token.d.ts +27 -0
  15. package/dist/auth/token.js +88 -0
  16. package/dist/auth/token.js.map +1 -0
  17. package/dist/index.d.ts +13 -0
  18. package/dist/index.js +137 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/install-skill.d.ts +23 -0
  21. package/dist/install-skill.js +73 -0
  22. package/dist/install-skill.js.map +1 -0
  23. package/dist/modules/apimapper/cache.d.ts +2 -0
  24. package/dist/modules/apimapper/cache.js +71 -0
  25. package/dist/modules/apimapper/cache.js.map +1 -0
  26. package/dist/modules/apimapper/client.d.ts +85 -0
  27. package/dist/modules/apimapper/client.js +523 -0
  28. package/dist/modules/apimapper/client.js.map +1 -0
  29. package/dist/modules/apimapper/connections.d.ts +2 -0
  30. package/dist/modules/apimapper/connections.js +406 -0
  31. package/dist/modules/apimapper/connections.js.map +1 -0
  32. package/dist/modules/apimapper/credential-sanitizer.d.ts +7 -0
  33. package/dist/modules/apimapper/credential-sanitizer.js +70 -0
  34. package/dist/modules/apimapper/credential-sanitizer.js.map +1 -0
  35. package/dist/modules/apimapper/credentials.d.ts +2 -0
  36. package/dist/modules/apimapper/credentials.js +258 -0
  37. package/dist/modules/apimapper/credentials.js.map +1 -0
  38. package/dist/modules/apimapper/diagnose.d.ts +18 -0
  39. package/dist/modules/apimapper/diagnose.js +305 -0
  40. package/dist/modules/apimapper/diagnose.js.map +1 -0
  41. package/dist/modules/apimapper/flows.d.ts +2 -0
  42. package/dist/modules/apimapper/flows.js +372 -0
  43. package/dist/modules/apimapper/flows.js.map +1 -0
  44. package/dist/modules/apimapper/get-skill.d.ts +4 -0
  45. package/dist/modules/apimapper/get-skill.js +88 -0
  46. package/dist/modules/apimapper/get-skill.js.map +1 -0
  47. package/dist/modules/apimapper/graph-builder.d.ts +47 -0
  48. package/dist/modules/apimapper/graph-builder.js +117 -0
  49. package/dist/modules/apimapper/graph-builder.js.map +1 -0
  50. package/dist/modules/apimapper/graph.d.ts +2 -0
  51. package/dist/modules/apimapper/graph.js +117 -0
  52. package/dist/modules/apimapper/graph.js.map +1 -0
  53. package/dist/modules/apimapper/index.d.ts +2 -0
  54. package/dist/modules/apimapper/index.js +43 -0
  55. package/dist/modules/apimapper/index.js.map +1 -0
  56. package/dist/modules/apimapper/inspect.d.ts +20 -0
  57. package/dist/modules/apimapper/inspect.js +86 -0
  58. package/dist/modules/apimapper/inspect.js.map +1 -0
  59. package/dist/modules/apimapper/library.d.ts +2 -0
  60. package/dist/modules/apimapper/library.js +237 -0
  61. package/dist/modules/apimapper/library.js.map +1 -0
  62. package/dist/modules/apimapper/license.d.ts +2 -0
  63. package/dist/modules/apimapper/license.js +142 -0
  64. package/dist/modules/apimapper/license.js.map +1 -0
  65. package/dist/modules/apimapper/local-sources.d.ts +2 -0
  66. package/dist/modules/apimapper/local-sources.js +123 -0
  67. package/dist/modules/apimapper/local-sources.js.map +1 -0
  68. package/dist/modules/apimapper/misc.d.ts +2 -0
  69. package/dist/modules/apimapper/misc.js +149 -0
  70. package/dist/modules/apimapper/misc.js.map +1 -0
  71. package/dist/modules/apimapper/node-schema.d.ts +217 -0
  72. package/dist/modules/apimapper/node-schema.js +218 -0
  73. package/dist/modules/apimapper/node-schema.js.map +1 -0
  74. package/dist/modules/apimapper/normalizers.d.ts +13 -0
  75. package/dist/modules/apimapper/normalizers.js +37 -0
  76. package/dist/modules/apimapper/normalizers.js.map +1 -0
  77. package/dist/modules/apimapper/onboarding.d.ts +51 -0
  78. package/dist/modules/apimapper/onboarding.js +201 -0
  79. package/dist/modules/apimapper/onboarding.js.map +1 -0
  80. package/dist/modules/apimapper/schema.d.ts +2 -0
  81. package/dist/modules/apimapper/schema.js +84 -0
  82. package/dist/modules/apimapper/schema.js.map +1 -0
  83. package/dist/modules/apimapper/settings.d.ts +2 -0
  84. package/dist/modules/apimapper/settings.js +157 -0
  85. package/dist/modules/apimapper/settings.js.map +1 -0
  86. package/dist/modules/apimapper/skill-resources.d.ts +4 -0
  87. package/dist/modules/apimapper/skill-resources.js +85 -0
  88. package/dist/modules/apimapper/skill-resources.js.map +1 -0
  89. package/dist/modules/apimapper/types.d.ts +111 -0
  90. package/dist/modules/apimapper/types.js +14 -0
  91. package/dist/modules/apimapper/types.js.map +1 -0
  92. package/dist/modules/apimapper/use-profile.d.ts +34 -0
  93. package/dist/modules/apimapper/use-profile.js +176 -0
  94. package/dist/modules/apimapper/use-profile.js.map +1 -0
  95. package/dist/modules/apimapper/workflows.d.ts +2 -0
  96. package/dist/modules/apimapper/workflows.js +301 -0
  97. package/dist/modules/apimapper/workflows.js.map +1 -0
  98. package/dist/platform/index.d.ts +71 -0
  99. package/dist/platform/index.js +377 -0
  100. package/dist/platform/index.js.map +1 -0
  101. package/dist/server-http.d.ts +22 -0
  102. package/dist/server-http.js +159 -0
  103. package/dist/server-http.js.map +1 -0
  104. package/dist/setup/detect-clients.d.ts +39 -0
  105. package/dist/setup/detect-clients.js +152 -0
  106. package/dist/setup/detect-clients.js.map +1 -0
  107. package/dist/setup/probe-handshake.d.ts +26 -0
  108. package/dist/setup/probe-handshake.js +159 -0
  109. package/dist/setup/probe-handshake.js.map +1 -0
  110. package/dist/setup/write-config.d.ts +25 -0
  111. package/dist/setup/write-config.js +247 -0
  112. package/dist/setup/write-config.js.map +1 -0
  113. package/dist/setup-cli.d.ts +49 -0
  114. package/dist/setup-cli.js +292 -0
  115. package/dist/setup-cli.js.map +1 -0
  116. package/dist/skill-instructions.d.ts +10 -0
  117. package/dist/skill-instructions.js +68 -0
  118. package/dist/skill-instructions.js.map +1 -0
  119. package/dist/transports/http.d.ts +29 -0
  120. package/dist/transports/http.js +267 -0
  121. package/dist/transports/http.js.map +1 -0
  122. package/dist/transports/stdio.d.ts +9 -0
  123. package/dist/transports/stdio.js +19 -0
  124. package/dist/transports/stdio.js.map +1 -0
  125. package/docs/architecture.md +140 -0
  126. package/docs/customgraph-internal-migration.md +210 -0
  127. package/docs/security.md +126 -0
  128. package/docs/tools.md +230 -0
  129. package/manifest.json +76 -0
  130. package/package.json +61 -0
  131. package/skills/apimapper/SKILL.md +57 -0
  132. package/skills/apimapper/reference/joomla.md +85 -0
  133. package/skills/apimapper/reference/oauth.md +94 -0
  134. package/skills/apimapper/reference/troubleshooting.md +123 -0
  135. 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":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,yEAAyE;YACtF,+DAA+D;QAC/D,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YACtG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACvF,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAC9F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC1D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;SAC7E;QACD,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,MAAM,OAAO,CACrB,YAAY,MAAM,CAAC,QAAQ,EAAE,EAAE,CAChC,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,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;gBAC/D,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;aAC3B,EACD,IAAI,CACL,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,QAAQ;YAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACnE,IAAI,SAAS,KAAK,KAAK;YAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACrE,IAAI,SAAS,KAAK,IAAI;YAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACrE,OAAO,eAAe,CACpB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,GAAG;YAC3B,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,GAAG;YAC3B,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;SACtC,CAAC,CAA8B,EAChC;YACE,OAAO,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gBACrC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;gBACzC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;gBACjD,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;gBACjD,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;aAC7C;YACD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,wBAAwB,IAAI,GAAG;YAClD,MAAM,EAAE,mEAAmE;SAC5E,CACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,4CAA4C;YACzD,kDAAkD;QAClD,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,GAAG,MAAM,OAAO,CAA6B,qBAAqB,CAAC,CAAC;QAC3E,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,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,oEAAoE;YACjF,gDAAgD;QAChD,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;SAC5E;QACD,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,GAAG,MAAM,OAAO,CAA4B,qBAAqB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7F,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,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAC5G,IAAI,CACL,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,qCAAqC;YAClD,+CAA+C;QAC/C,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;SAC5E;QACD,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,GAAG,MAAM,OAAO,CAA4B,oBAAoB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5F,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,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAC5G,IAAI,CACL,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,4FAA4F;YAC5F,sDAAsD;YACtD,+CAA+C;QACjD,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,GAAG,MAAM,OAAO,CAAwC,kBAAkB,CAAC,CAAC;QACnF,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,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,qCAAqC,EACrC;QACE,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EACT,mGAAmG;YACnG,uEAAuE;QACzE,WAAW,EAAE;YACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;SAChF;QACD,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,MAAM,CAAC,GAAG,MAAM,OAAO,CAAU,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnF,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,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EACzG,IAAI,CACL,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAChF,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,EAClG,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,8BAA8B;QACrC,WAAW,EAAE,qEAAqE;YAClF,iDAAiD;QACjD,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,GAAG,MAAM,OAAO,CAAwB,oBAAoB,CAAC,CAAC;QACrE,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,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,yEAAyE;YACzE,4GAA4G;YAC5G,wGAAwG;QAC1G,WAAW,EAAE;YACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YAC/E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;YAC9G,YAAY,EAAE,CAAC;iBACZ,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/B,QAAQ,EAAE;iBACV,QAAQ,CAAC,wGAAwG,CAAC;YACrH,kBAAkB,EAAE,CAAC;iBAClB,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/B,QAAQ,EAAE;iBACV,QAAQ,CACP,oFAAoF;gBAClF,+BAA+B,CAClC;SACJ;QACD,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,EAAE,EAAE;QAChE,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,aAAa;YAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACtD,IAAI,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACnD,IAAI,kBAAkB;YAAE,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QACrE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAU,YAAY,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE;YAC9E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,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,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EACzG,IAAI,CACL,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,IAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,OAAO,YAAY,CACjB;YACE,SAAS,EAAE,IAAI;YACf,EAAE;YACF,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,IAAI,IAAI;YACpE,IAAI,EAAE,uEAAuE;SAC9E,EACD,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,6BAA6B;QACpC,WAAW,EACT,qEAAqE;YACrE,qCAAqC;YACrC,gFAAgF;QAClF,WAAW,EAAE;YACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YAC5E,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,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,YAAY,CAAC;gBAClB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,8EAA8E;gBACvF,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;gBACvC,WAAW,EAAE,0DAA0D;aACxE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,YAAY,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE;YACrE,MAAM,EAAE,QAAQ;SACjB,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,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EACzG,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerLicenseTools(server: McpServer): void;
@@ -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":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerLocalSourceTools(server: McpServer): void;
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerMiscTools(server: McpServer): void;