0nmcp 2.9.2 → 3.0.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/README.md +59 -10
- package/catalog.js +483 -50
- package/lib/knowledge-layers.js +440 -0
- package/lib/stats.json +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,20 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
# 0nMCP
|
|
4
4
|
|
|
5
|
-
###
|
|
5
|
+
### 995+ Tools. 55 Services. One MCP Server.
|
|
6
6
|
|
|
7
7
|
**The most comprehensive MCP server available.**<br>
|
|
8
|
-
Connect any AI to any API. Natural language. Zero configuration. $0.01/run
|
|
8
|
+
Connect any AI to any API. Natural language. Zero configuration. $0.01/run.<br>
|
|
9
|
+
4 patents filed. LinkedIn certifications. Daily patent monitoring via 0nDefender.
|
|
9
10
|
|
|
10
11
|
[](https://www.npmjs.com/package/0nmcp)
|
|
11
12
|
[](https://www.npmjs.com/package/0nmcp)
|
|
12
13
|
[](https://opensource.org/licenses/MIT)
|
|
13
14
|
[](https://nodejs.org)
|
|
14
15
|
[](https://modelcontextprotocol.io)
|
|
15
|
-
[](#tool-count-breakdown)
|
|
17
|
+
[](#all-55-services)
|
|
18
|
+
[](#key-features)
|
|
17
19
|
|
|
18
|
-
[Website](https://0nmcp.com) · [Quick Start](#quick-start) · [All
|
|
20
|
+
[Website](https://0nmcp.com) · [Quick Start](#quick-start) · [All 55 Services](#all-55-services) · [MCP Config](#mcp-configuration) · [Certifications](https://0nmcp.com/learn) · [Community](https://0nmcp.com/community)
|
|
19
21
|
|
|
20
22
|
</div>
|
|
21
23
|
|
|
@@ -117,7 +119,7 @@ That's it. Your AI can now use 945 tools across 54 services.
|
|
|
117
119
|
| Service | Tools | What You Can Do |
|
|
118
120
|
|---------|-------|-----------------|
|
|
119
121
|
| **Mailchimp** | Email Marketing | Campaigns, audiences, automations |
|
|
120
|
-
| **LinkedIn** |
|
|
122
|
+
| **LinkedIn** | 50 tools | Posts, profiles, org pages, ads, reporting, events, certifications |
|
|
121
123
|
| **Instagram** | Social | Posts, stories, insights |
|
|
122
124
|
| **TikTok** | Social | Videos, analytics |
|
|
123
125
|
| **Twitter/X** | Social | Tweets, timelines, users |
|
|
@@ -169,14 +171,14 @@ That's it. Your AI can now use 945 tools across 54 services.
|
|
|
169
171
|
|
|
170
172
|
| Module | Tools | Description |
|
|
171
173
|
|--------|-------|-------------|
|
|
172
|
-
| **Service Catalog** |
|
|
173
|
-
| **CRM Module** |
|
|
174
|
+
| **Service Catalog** | 701 | API tools across 55 services (including LinkedIn 50-tool suite) |
|
|
175
|
+
| **CRM Module** | 245 | Contacts, calendars, pipelines, invoices, payments, social, custom objects |
|
|
174
176
|
| **0nVault** | 4 | AES-256-GCM machine-bound encryption |
|
|
175
177
|
| **Vault Containers** | 8 | Patent-pending multi-layer encrypted containers (US #63/990,046) |
|
|
176
178
|
| **Deed Transfer** | 6 | Digital business asset packaging and transfer |
|
|
177
|
-
| **Engine** |
|
|
179
|
+
| **Engine** | 29 | Credential import, verification, AI platform config generation |
|
|
178
180
|
| **App Builder** | 5 | Operations, routes, middleware, scheduler |
|
|
179
|
-
| **Total** | **
|
|
181
|
+
| **Total** | **995+** | |
|
|
180
182
|
|
|
181
183
|
---
|
|
182
184
|
|
|
@@ -315,6 +317,51 @@ Credentials are stored in `~/.0n/connections/` and workflows in `~/.0n/workflows
|
|
|
315
317
|
|
|
316
318
|
---
|
|
317
319
|
|
|
320
|
+
## LinkedIn Integration (50 tools)
|
|
321
|
+
|
|
322
|
+
Full LinkedIn API v2 suite with 17 OAuth scopes:
|
|
323
|
+
|
|
324
|
+
| Category | Endpoints | Capabilities |
|
|
325
|
+
|----------|-----------|-------------|
|
|
326
|
+
| **Profile** | 5 | Basic info, email, connections, verification, photos |
|
|
327
|
+
| **Social** | 10 | Posts CRUD, comments, likes, shares, image/video upload |
|
|
328
|
+
| **Organization** | 10 | Pages, stats, followers, visitors, brand pages |
|
|
329
|
+
| **Advertising** | 15 | Accounts, campaigns, creatives, targeting, lead forms |
|
|
330
|
+
| **Ad Reporting** | 5 | Analytics, conversions, budgets, InMail stats |
|
|
331
|
+
| **Events** | 5 | Create, manage, attendees |
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 0nMCP Certifications
|
|
336
|
+
|
|
337
|
+
Complete courses and earn LinkedIn-verifiable certifications:
|
|
338
|
+
|
|
339
|
+
| Certification | Course | Level |
|
|
340
|
+
|--------------|--------|-------|
|
|
341
|
+
| **0nMCP Certified Orchestrator** | 0nMCP Mastery | Getting Started |
|
|
342
|
+
| **CRM Automation Specialist** | CRM Automation Blueprint | Intermediate |
|
|
343
|
+
| **Security Engineer** | 0nVault Security | Advanced |
|
|
344
|
+
| **AI Council Architect** | 0nPlex Council | Advanced |
|
|
345
|
+
| **Enterprise Deployer** | Enterprise Deployment | Enterprise |
|
|
346
|
+
| **Certified Developer** | .0n SWITCH Files | Fundamentals |
|
|
347
|
+
|
|
348
|
+
Add certifications to your LinkedIn profile with one click. Public verification at `0nmcp.com/verify/{certId}`.
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## 0nDefender (Patent Intelligence)
|
|
353
|
+
|
|
354
|
+
Always-on competitive intelligence that monitors four threat vectors daily:
|
|
355
|
+
|
|
356
|
+
- **MCP Ecosystem Entrants** — new companies building on MCP
|
|
357
|
+
- **Patent Conflicts** — USPTO/WIPO filings overlapping our 4 patents
|
|
358
|
+
- **Acquisition Signals** — companies that might license or acquire
|
|
359
|
+
- **Brand Protection** — unauthorized use of 0nMCP IP
|
|
360
|
+
|
|
361
|
+
Automated daily scans via Claude AI with web search. Dashboard at `/admin/patent-intel`.
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
318
365
|
## Links
|
|
319
366
|
|
|
320
367
|
- **Website**: [0nmcp.com](https://0nmcp.com)
|
|
@@ -323,6 +370,8 @@ Credentials are stored in `~/.0n/connections/` and workflows in `~/.0n/workflows
|
|
|
323
370
|
- **Community**: [0nmcp.com/community](https://0nmcp.com/community)
|
|
324
371
|
- **Forum**: [0nmcp.com/forum](https://0nmcp.com/forum)
|
|
325
372
|
- **Marketplace**: [marketplace.rocketclients.com](https://marketplace.rocketclients.com)
|
|
373
|
+
- **Learn & Certify**: [0nmcp.com/learn](https://0nmcp.com/learn)
|
|
374
|
+
- **Community Grid**: [grid.0nmcp.com](https://grid.0nmcp.com)
|
|
326
375
|
|
|
327
376
|
---
|
|
328
377
|
|
package/catalog.js
CHANGED
|
@@ -255,20 +255,82 @@ export const SERVICE_CATALOG = {
|
|
|
255
255
|
slack: {
|
|
256
256
|
name: "Slack",
|
|
257
257
|
type: "communication",
|
|
258
|
-
description: "Team messaging — channels,
|
|
258
|
+
description: "Team messaging — channels, messages, threads, users, files, reactions, bookmarks, reminders, canvases, search, scheduled messages, pins",
|
|
259
259
|
baseUrl: "https://slack.com/api",
|
|
260
|
+
mcpServer: "https://mcp.slack.com/mcp",
|
|
260
261
|
authType: "bot_token",
|
|
261
262
|
credentialKeys: ["botToken"],
|
|
262
263
|
capabilities: [
|
|
263
|
-
{ name: "send_message", actions: ["send"], description: "Post
|
|
264
|
-
{ name: "manage_channels", actions: ["list", "create"], description: "
|
|
265
|
-
{ name: "
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
264
|
+
{ name: "send_message", actions: ["send", "update", "delete", "schedule"], description: "Post, update, delete, and schedule messages" },
|
|
265
|
+
{ name: "manage_channels", actions: ["list", "create", "archive", "rename", "set_topic", "set_purpose", "invite", "kick"], description: "Full channel lifecycle management" },
|
|
266
|
+
{ name: "manage_threads", actions: ["reply", "list_replies"], description: "Thread replies and conversation management" },
|
|
267
|
+
{ name: "manage_users", actions: ["list", "get", "set_status"], description: "List users, get profiles, set status" },
|
|
268
|
+
{ name: "manage_files", actions: ["upload", "list", "delete", "share"], description: "Upload, list, delete, and share files" },
|
|
269
|
+
{ name: "manage_reactions", actions: ["add", "remove", "list"], description: "Emoji reactions on messages" },
|
|
270
|
+
{ name: "manage_pins", actions: ["add", "remove", "list"], description: "Pin and unpin messages in channels" },
|
|
271
|
+
{ name: "manage_bookmarks", actions: ["add", "remove", "list"], description: "Channel bookmarks" },
|
|
272
|
+
{ name: "manage_reminders", actions: ["add", "list", "delete"], description: "Set and manage reminders" },
|
|
273
|
+
{ name: "search", actions: ["messages", "files", "users"], description: "Search across messages, files, and users" },
|
|
274
|
+
{ name: "manage_canvases", actions: ["create", "update", "read"], description: "Create and edit Slack canvases" },
|
|
275
|
+
],
|
|
276
|
+
endpoints: {
|
|
277
|
+
// Messages
|
|
278
|
+
send_message: { method: "POST", path: "/chat.postMessage", body: { channel: "", text: "" } },
|
|
279
|
+
update_message: { method: "POST", path: "/chat.update", body: { channel: "", ts: "", text: "" } },
|
|
280
|
+
delete_message: { method: "POST", path: "/chat.delete", body: { channel: "", ts: "" } },
|
|
281
|
+
schedule_message: { method: "POST", path: "/chat.scheduleMessage", body: { channel: "", text: "", post_at: 0 } },
|
|
282
|
+
get_permalink: { method: "GET", path: "/chat.getPermalink", query: ["channel", "message_ts"] },
|
|
283
|
+
// Threads
|
|
284
|
+
reply_to_thread: { method: "POST", path: "/chat.postMessage", body: { channel: "", thread_ts: "", text: "" } },
|
|
285
|
+
get_thread_replies: { method: "GET", path: "/conversations.replies", query: ["channel", "ts"] },
|
|
286
|
+
// Channels
|
|
287
|
+
list_channels: { method: "GET", path: "/conversations.list", query: ["types", "limit", "cursor"] },
|
|
288
|
+
create_channel: { method: "POST", path: "/conversations.create", body: { name: "" } },
|
|
289
|
+
archive_channel: { method: "POST", path: "/conversations.archive", body: { channel: "" } },
|
|
290
|
+
unarchive_channel: { method: "POST", path: "/conversations.unarchive", body: { channel: "" } },
|
|
291
|
+
rename_channel: { method: "POST", path: "/conversations.rename", body: { channel: "", name: "" } },
|
|
292
|
+
set_channel_topic: { method: "POST", path: "/conversations.setTopic", body: { channel: "", topic: "" } },
|
|
293
|
+
set_channel_purpose: { method: "POST", path: "/conversations.setPurpose", body: { channel: "", purpose: "" } },
|
|
294
|
+
invite_to_channel: { method: "POST", path: "/conversations.invite", body: { channel: "", users: "" } },
|
|
295
|
+
kick_from_channel: { method: "POST", path: "/conversations.kick", body: { channel: "", user: "" } },
|
|
296
|
+
channel_history: { method: "GET", path: "/conversations.history", query: ["channel", "limit", "oldest", "latest"] },
|
|
297
|
+
channel_info: { method: "GET", path: "/conversations.info", query: ["channel"] },
|
|
298
|
+
join_channel: { method: "POST", path: "/conversations.join", body: { channel: "" } },
|
|
299
|
+
leave_channel: { method: "POST", path: "/conversations.leave", body: { channel: "" } },
|
|
300
|
+
// Users
|
|
301
|
+
list_users: { method: "GET", path: "/users.list", query: ["limit", "cursor"] },
|
|
302
|
+
get_user: { method: "GET", path: "/users.info", query: ["user"] },
|
|
303
|
+
get_user_profile: { method: "GET", path: "/users.profile.get", query: ["user"] },
|
|
304
|
+
set_user_status: { method: "POST", path: "/users.profile.set", body: { profile: { status_text: "", status_emoji: "" } } },
|
|
305
|
+
// Files
|
|
306
|
+
upload_file: { method: "POST", path: "/files.upload", body: { channels: "", filename: "", content: "" } },
|
|
307
|
+
list_files: { method: "GET", path: "/files.list", query: ["channel", "types", "count"] },
|
|
308
|
+
delete_file: { method: "POST", path: "/files.delete", body: { file: "" } },
|
|
309
|
+
share_file: { method: "POST", path: "/files.sharedPublicURL", body: { file: "" } },
|
|
310
|
+
// Reactions
|
|
311
|
+
add_reaction: { method: "POST", path: "/reactions.add", body: { channel: "", timestamp: "", name: "" } },
|
|
312
|
+
remove_reaction: { method: "POST", path: "/reactions.remove", body: { channel: "", timestamp: "", name: "" } },
|
|
313
|
+
list_reactions: { method: "GET", path: "/reactions.get", query: ["channel", "timestamp"] },
|
|
314
|
+
// Pins
|
|
315
|
+
pin_message: { method: "POST", path: "/pins.add", body: { channel: "", timestamp: "" } },
|
|
316
|
+
unpin_message: { method: "POST", path: "/pins.remove", body: { channel: "", timestamp: "" } },
|
|
317
|
+
list_pins: { method: "GET", path: "/pins.list", query: ["channel"] },
|
|
318
|
+
// Bookmarks
|
|
319
|
+
add_bookmark: { method: "POST", path: "/bookmarks.add", body: { channel_id: "", title: "", type: "link", link: "" } },
|
|
320
|
+
remove_bookmark: { method: "POST", path: "/bookmarks.remove", body: { bookmark_id: "", channel_id: "" } },
|
|
321
|
+
list_bookmarks: { method: "GET", path: "/bookmarks.list", query: ["channel_id"] },
|
|
322
|
+
// Reminders
|
|
323
|
+
add_reminder: { method: "POST", path: "/reminders.add", body: { text: "", time: "" } },
|
|
324
|
+
list_reminders: { method: "GET", path: "/reminders.list" },
|
|
325
|
+
delete_reminder: { method: "POST", path: "/reminders.delete", body: { reminder: "" } },
|
|
326
|
+
// Search
|
|
327
|
+
search_messages: { method: "GET", path: "/search.messages", query: ["query", "count", "sort", "sort_dir"] },
|
|
328
|
+
search_files: { method: "GET", path: "/search.files", query: ["query", "count"] },
|
|
329
|
+
// Canvases
|
|
330
|
+
create_canvas: { method: "POST", path: "/canvases.create", body: { title: "", document_content: { type: "markdown", markdown: "" } } },
|
|
331
|
+
update_canvas: { method: "POST", path: "/canvases.edit", body: { canvas_id: "", changes: [] } },
|
|
332
|
+
// Team info
|
|
333
|
+
get_team_info: { method: "GET", path: "/team.info" },
|
|
272
334
|
},
|
|
273
335
|
authHeader: (creds) => ({
|
|
274
336
|
"Authorization": `Bearer ${creds.botToken}`,
|
|
@@ -1244,35 +1306,94 @@ export const SERVICE_CATALOG = {
|
|
|
1244
1306
|
square: {
|
|
1245
1307
|
name: "Square",
|
|
1246
1308
|
type: "payments",
|
|
1247
|
-
description: "Payments
|
|
1309
|
+
description: "Payments, commerce, POS, invoices, subscriptions, loyalty, gift cards, bookings, team, locations — full Square ecosystem",
|
|
1248
1310
|
baseUrl: "https://connect.squareup.com/v2",
|
|
1249
1311
|
authType: "access_token",
|
|
1250
1312
|
credentialKeys: ["accessToken"],
|
|
1251
1313
|
capabilities: [
|
|
1252
|
-
{ name: "manage_payments", actions: ["create", "list", "get", "refund"], description: "Process and
|
|
1253
|
-
{ name: "manage_customers", actions: ["create", "list", "get", "update", "delete"], description: "
|
|
1254
|
-
{ name: "manage_orders", actions: ["create", "list", "get"], description: "Create and
|
|
1255
|
-
{ name: "manage_catalog", actions: ["create", "list", "search"], description: "
|
|
1256
|
-
{ name: "manage_inventory", actions: ["get", "adjust"], description: "
|
|
1257
|
-
|
|
1258
|
-
|
|
1314
|
+
{ name: "manage_payments", actions: ["create", "list", "get", "refund", "complete"], description: "Process payments, refunds, and completions" },
|
|
1315
|
+
{ name: "manage_customers", actions: ["create", "list", "get", "update", "delete", "search"], description: "Full customer directory management" },
|
|
1316
|
+
{ name: "manage_orders", actions: ["create", "list", "get", "update", "pay"], description: "Create, manage, and pay orders" },
|
|
1317
|
+
{ name: "manage_catalog", actions: ["create", "list", "search", "update", "delete"], description: "Product catalog lifecycle" },
|
|
1318
|
+
{ name: "manage_inventory", actions: ["get", "adjust", "transfer"], description: "Inventory tracking and transfers" },
|
|
1319
|
+
{ name: "manage_invoices", actions: ["create", "list", "get", "update", "publish", "cancel"], description: "Create and send invoices" },
|
|
1320
|
+
{ name: "manage_subscriptions", actions: ["create", "list", "get", "update", "cancel"], description: "Recurring billing subscriptions" },
|
|
1321
|
+
{ name: "manage_loyalty", actions: ["create_account", "list_accounts", "accumulate", "redeem"], description: "Loyalty program management" },
|
|
1322
|
+
{ name: "manage_gift_cards", actions: ["create", "list", "get", "link", "unlink"], description: "Gift card operations" },
|
|
1323
|
+
{ name: "manage_bookings", actions: ["create", "list", "get", "update", "cancel"], description: "Appointment scheduling" },
|
|
1324
|
+
{ name: "manage_team", actions: ["create", "list", "get", "update"], description: "Team member management" },
|
|
1325
|
+
{ name: "manage_locations", actions: ["list", "get", "create", "update"], description: "Multi-location management" },
|
|
1326
|
+
],
|
|
1327
|
+
endpoints: {
|
|
1328
|
+
// Payments
|
|
1259
1329
|
create_payment: { method: "POST", path: "/payments", body: { source_id: "", idempotency_key: "", amount_money: { amount: 0, currency: "USD" } } },
|
|
1260
1330
|
list_payments: { method: "GET", path: "/payments", query: ["begin_time", "end_time", "sort_order", "cursor", "limit"] },
|
|
1261
1331
|
get_payment: { method: "GET", path: "/payments/{paymentId}" },
|
|
1332
|
+
complete_payment: { method: "POST", path: "/payments/{paymentId}/complete" },
|
|
1262
1333
|
create_refund: { method: "POST", path: "/refunds", body: { idempotency_key: "", payment_id: "", amount_money: {} } },
|
|
1334
|
+
list_refunds: { method: "GET", path: "/refunds", query: ["begin_time", "end_time", "cursor", "limit"] },
|
|
1335
|
+
// Customers
|
|
1263
1336
|
create_customer: { method: "POST", path: "/customers", body: { given_name: "", family_name: "", email_address: "" } },
|
|
1264
1337
|
list_customers: { method: "GET", path: "/customers", query: ["cursor", "limit", "sort_field", "sort_order"] },
|
|
1265
1338
|
get_customer: { method: "GET", path: "/customers/{customerId}" },
|
|
1266
1339
|
update_customer: { method: "PUT", path: "/customers/{customerId}", body: {} },
|
|
1267
1340
|
delete_customer: { method: "DELETE", path: "/customers/{customerId}" },
|
|
1341
|
+
search_customers: { method: "POST", path: "/customers/search", body: { query: {} } },
|
|
1342
|
+
// Orders
|
|
1268
1343
|
create_order: { method: "POST", path: "/orders", body: { order: { location_id: "", line_items: [] }, idempotency_key: "" } },
|
|
1269
|
-
|
|
1344
|
+
search_orders: { method: "POST", path: "/orders/search", body: { location_ids: [], query: {} } },
|
|
1270
1345
|
get_order: { method: "GET", path: "/orders/{orderId}" },
|
|
1346
|
+
update_order: { method: "PUT", path: "/orders/{orderId}", body: { order: {} } },
|
|
1347
|
+
pay_order: { method: "POST", path: "/orders/{orderId}/pay", body: { idempotency_key: "" } },
|
|
1348
|
+
// Catalog
|
|
1271
1349
|
create_catalog_object:{ method: "POST", path: "/catalog/object", body: { idempotency_key: "", object: {} } },
|
|
1272
1350
|
list_catalog: { method: "GET", path: "/catalog/list", query: ["types", "cursor"] },
|
|
1273
1351
|
search_catalog: { method: "POST", path: "/catalog/search", body: { object_types: [], query: {} } },
|
|
1352
|
+
update_catalog_object:{ method: "POST", path: "/catalog/object", body: { idempotency_key: "", object: {} } },
|
|
1353
|
+
delete_catalog_object:{ method: "DELETE", path: "/catalog/object/{objectId}" },
|
|
1354
|
+
// Inventory
|
|
1274
1355
|
get_inventory: { method: "POST", path: "/inventory/counts/batch-retrieve", body: { catalog_object_ids: [] } },
|
|
1275
1356
|
adjust_inventory: { method: "POST", path: "/inventory/changes/batch-create", body: { idempotency_key: "", changes: [] } },
|
|
1357
|
+
transfer_inventory: { method: "POST", path: "/inventory/transfers/batch-create", body: { idempotency_key: "", transfers: [] } },
|
|
1358
|
+
// Invoices
|
|
1359
|
+
create_invoice: { method: "POST", path: "/invoices", body: { invoice: {}, idempotency_key: "" } },
|
|
1360
|
+
list_invoices: { method: "GET", path: "/invoices", query: ["location_id", "cursor", "limit"] },
|
|
1361
|
+
get_invoice: { method: "GET", path: "/invoices/{invoiceId}" },
|
|
1362
|
+
update_invoice: { method: "PUT", path: "/invoices/{invoiceId}", body: { invoice: {} } },
|
|
1363
|
+
publish_invoice: { method: "POST", path: "/invoices/{invoiceId}/publish", body: { version: 0, idempotency_key: "" } },
|
|
1364
|
+
cancel_invoice: { method: "POST", path: "/invoices/{invoiceId}/cancel" },
|
|
1365
|
+
// Subscriptions
|
|
1366
|
+
create_subscription: { method: "POST", path: "/subscriptions", body: { idempotency_key: "", location_id: "", plan_variation_id: "", customer_id: "" } },
|
|
1367
|
+
list_subscriptions: { method: "POST", path: "/subscriptions/search", body: { query: {} } },
|
|
1368
|
+
get_subscription: { method: "GET", path: "/subscriptions/{subscriptionId}" },
|
|
1369
|
+
update_subscription: { method: "PUT", path: "/subscriptions/{subscriptionId}", body: {} },
|
|
1370
|
+
cancel_subscription: { method: "POST", path: "/subscriptions/{subscriptionId}/cancel" },
|
|
1371
|
+
// Loyalty
|
|
1372
|
+
create_loyalty_account: { method: "POST", path: "/loyalty/accounts", body: { account: {}, idempotency_key: "" } },
|
|
1373
|
+
search_loyalty_accounts:{ method: "POST", path: "/loyalty/accounts/search", body: { query: {} } },
|
|
1374
|
+
accumulate_loyalty: { method: "POST", path: "/loyalty/accounts/{accountId}/accumulate", body: { accumulate_points: {}, idempotency_key: "" } },
|
|
1375
|
+
redeem_loyalty: { method: "POST", path: "/loyalty/rewards", body: { reward: {}, idempotency_key: "" } },
|
|
1376
|
+
// Gift Cards
|
|
1377
|
+
create_gift_card: { method: "POST", path: "/gift-cards", body: { idempotency_key: "", location_id: "", type: "DIGITAL" } },
|
|
1378
|
+
list_gift_cards: { method: "GET", path: "/gift-cards", query: ["type", "state", "cursor", "limit"] },
|
|
1379
|
+
get_gift_card: { method: "GET", path: "/gift-cards/{giftCardId}" },
|
|
1380
|
+
link_gift_card: { method: "POST", path: "/gift-cards/{giftCardId}/link-customer", body: { customer_id: "" } },
|
|
1381
|
+
// Bookings
|
|
1382
|
+
create_booking: { method: "POST", path: "/bookings", body: { booking: {}, idempotency_key: "" } },
|
|
1383
|
+
list_bookings: { method: "GET", path: "/bookings", query: ["limit", "cursor", "team_member_id", "location_id", "start_at_min", "start_at_max"] },
|
|
1384
|
+
get_booking: { method: "GET", path: "/bookings/{bookingId}" },
|
|
1385
|
+
update_booking: { method: "PUT", path: "/bookings/{bookingId}", body: { booking: {} } },
|
|
1386
|
+
cancel_booking: { method: "POST", path: "/bookings/{bookingId}/cancel" },
|
|
1387
|
+
// Team
|
|
1388
|
+
create_team_member: { method: "POST", path: "/team-members", body: { idempotency_key: "", team_member: {} } },
|
|
1389
|
+
search_team_members: { method: "POST", path: "/team-members/search", body: { query: {} } },
|
|
1390
|
+
get_team_member: { method: "GET", path: "/team-members/{teamMemberId}" },
|
|
1391
|
+
update_team_member: { method: "PUT", path: "/team-members/{teamMemberId}", body: { team_member: {} } },
|
|
1392
|
+
// Locations
|
|
1393
|
+
list_locations: { method: "GET", path: "/locations" },
|
|
1394
|
+
get_location: { method: "GET", path: "/locations/{locationId}" },
|
|
1395
|
+
create_location: { method: "POST", path: "/locations", body: { location: {} } },
|
|
1396
|
+
update_location: { method: "PUT", path: "/locations/{locationId}", body: { location: {} } },
|
|
1276
1397
|
},
|
|
1277
1398
|
authHeader: (creds) => ({
|
|
1278
1399
|
"Authorization": `Bearer ${creds.accessToken}`,
|
|
@@ -1281,6 +1402,85 @@ export const SERVICE_CATALOG = {
|
|
|
1281
1402
|
}),
|
|
1282
1403
|
},
|
|
1283
1404
|
|
|
1405
|
+
// ── WooCommerce ──────────────────────────────────────────────
|
|
1406
|
+
woocommerce: {
|
|
1407
|
+
name: "WooCommerce",
|
|
1408
|
+
type: "ecommerce",
|
|
1409
|
+
description: "WordPress e-commerce — products, orders, customers, coupons, categories, reports, shipping, taxes, refunds",
|
|
1410
|
+
baseUrl: "https://{siteUrl}/wp-json/wc/v3",
|
|
1411
|
+
authType: "basic",
|
|
1412
|
+
credentialKeys: ["siteUrl", "consumerKey", "consumerSecret"],
|
|
1413
|
+
capabilities: [
|
|
1414
|
+
{ name: "manage_products", actions: ["create", "list", "get", "update", "delete"], description: "Full product lifecycle management" },
|
|
1415
|
+
{ name: "manage_orders", actions: ["create", "list", "get", "update", "delete"], description: "Order processing and fulfillment" },
|
|
1416
|
+
{ name: "manage_customers", actions: ["create", "list", "get", "update", "delete"], description: "Customer directory" },
|
|
1417
|
+
{ name: "manage_coupons", actions: ["create", "list", "get", "update", "delete"], description: "Discount coupon management" },
|
|
1418
|
+
{ name: "manage_categories", actions: ["create", "list", "get", "update", "delete"], description: "Product categories" },
|
|
1419
|
+
{ name: "manage_shipping", actions: ["list_zones", "list_methods"], description: "Shipping configuration" },
|
|
1420
|
+
{ name: "manage_reports", actions: ["sales", "top_sellers", "coupons"], description: "Sales and performance reports" },
|
|
1421
|
+
{ name: "manage_refunds", actions: ["create", "list"], description: "Order refunds" },
|
|
1422
|
+
],
|
|
1423
|
+
endpoints: {
|
|
1424
|
+
// Products
|
|
1425
|
+
create_product: { method: "POST", path: "/products", body: { name: "", type: "simple", regular_price: "" } },
|
|
1426
|
+
list_products: { method: "GET", path: "/products", query: ["per_page", "page", "search", "status", "category", "sku", "orderby", "order"] },
|
|
1427
|
+
get_product: { method: "GET", path: "/products/{productId}" },
|
|
1428
|
+
update_product: { method: "PUT", path: "/products/{productId}", body: {} },
|
|
1429
|
+
delete_product: { method: "DELETE", path: "/products/{productId}", query: ["force"] },
|
|
1430
|
+
// Product Variations
|
|
1431
|
+
list_variations: { method: "GET", path: "/products/{productId}/variations" },
|
|
1432
|
+
create_variation: { method: "POST", path: "/products/{productId}/variations", body: { regular_price: "" } },
|
|
1433
|
+
update_variation: { method: "PUT", path: "/products/{productId}/variations/{variationId}", body: {} },
|
|
1434
|
+
// Product Categories
|
|
1435
|
+
create_category: { method: "POST", path: "/products/categories", body: { name: "" } },
|
|
1436
|
+
list_categories: { method: "GET", path: "/products/categories", query: ["per_page", "page", "search"] },
|
|
1437
|
+
get_category: { method: "GET", path: "/products/categories/{categoryId}" },
|
|
1438
|
+
update_category: { method: "PUT", path: "/products/categories/{categoryId}", body: {} },
|
|
1439
|
+
delete_category: { method: "DELETE", path: "/products/categories/{categoryId}" },
|
|
1440
|
+
// Orders
|
|
1441
|
+
create_order: { method: "POST", path: "/orders", body: { payment_method: "", billing: {}, line_items: [] } },
|
|
1442
|
+
list_orders: { method: "GET", path: "/orders", query: ["per_page", "page", "status", "customer", "after", "before", "orderby", "order"] },
|
|
1443
|
+
get_order: { method: "GET", path: "/orders/{orderId}" },
|
|
1444
|
+
update_order: { method: "PUT", path: "/orders/{orderId}", body: {} },
|
|
1445
|
+
delete_order: { method: "DELETE", path: "/orders/{orderId}" },
|
|
1446
|
+
// Order Notes
|
|
1447
|
+
create_order_note: { method: "POST", path: "/orders/{orderId}/notes", body: { note: "" } },
|
|
1448
|
+
list_order_notes: { method: "GET", path: "/orders/{orderId}/notes" },
|
|
1449
|
+
// Refunds
|
|
1450
|
+
create_refund: { method: "POST", path: "/orders/{orderId}/refunds", body: { amount: "", reason: "" } },
|
|
1451
|
+
list_refunds: { method: "GET", path: "/orders/{orderId}/refunds" },
|
|
1452
|
+
// Customers
|
|
1453
|
+
create_customer: { method: "POST", path: "/customers", body: { email: "", first_name: "", last_name: "" } },
|
|
1454
|
+
list_customers: { method: "GET", path: "/customers", query: ["per_page", "page", "search", "role", "orderby", "order"] },
|
|
1455
|
+
get_customer: { method: "GET", path: "/customers/{customerId}" },
|
|
1456
|
+
update_customer: { method: "PUT", path: "/customers/{customerId}", body: {} },
|
|
1457
|
+
delete_customer: { method: "DELETE", path: "/customers/{customerId}" },
|
|
1458
|
+
// Coupons
|
|
1459
|
+
create_coupon: { method: "POST", path: "/coupons", body: { code: "", discount_type: "percent", amount: "" } },
|
|
1460
|
+
list_coupons: { method: "GET", path: "/coupons", query: ["per_page", "page", "search"] },
|
|
1461
|
+
get_coupon: { method: "GET", path: "/coupons/{couponId}" },
|
|
1462
|
+
update_coupon: { method: "PUT", path: "/coupons/{couponId}", body: {} },
|
|
1463
|
+
delete_coupon: { method: "DELETE", path: "/coupons/{couponId}" },
|
|
1464
|
+
// Shipping
|
|
1465
|
+
list_shipping_zones: { method: "GET", path: "/shipping/zones" },
|
|
1466
|
+
list_shipping_methods:{ method: "GET", path: "/shipping/zones/{zoneId}/methods" },
|
|
1467
|
+
// Reports
|
|
1468
|
+
sales_report: { method: "GET", path: "/reports/sales", query: ["period", "date_min", "date_max"] },
|
|
1469
|
+
top_sellers_report: { method: "GET", path: "/reports/top_sellers", query: ["period"] },
|
|
1470
|
+
coupons_report: { method: "GET", path: "/reports/coupons/totals" },
|
|
1471
|
+
// Taxes
|
|
1472
|
+
list_tax_classes: { method: "GET", path: "/taxes/classes" },
|
|
1473
|
+
list_tax_rates: { method: "GET", path: "/taxes" },
|
|
1474
|
+
// Settings
|
|
1475
|
+
list_settings: { method: "GET", path: "/settings" },
|
|
1476
|
+
get_setting_group: { method: "GET", path: "/settings/{group}" },
|
|
1477
|
+
},
|
|
1478
|
+
authHeader: (creds) => ({
|
|
1479
|
+
"Authorization": `Basic ${Buffer.from(`${creds.consumerKey}:${creds.consumerSecret}`).toString('base64')}`,
|
|
1480
|
+
"Content-Type": "application/json",
|
|
1481
|
+
}),
|
|
1482
|
+
},
|
|
1483
|
+
|
|
1284
1484
|
// ── TikTok Ads ──────────────────────────────────────────────
|
|
1285
1485
|
tiktok_ads: {
|
|
1286
1486
|
name: "TikTok Ads",
|
|
@@ -1539,38 +1739,142 @@ export const SERVICE_CATALOG = {
|
|
|
1539
1739
|
pipedrive: {
|
|
1540
1740
|
name: "Pipedrive",
|
|
1541
1741
|
type: "crm",
|
|
1542
|
-
description: "Sales CRM — deals, persons, organizations, activities, pipelines, notes",
|
|
1742
|
+
description: "Sales CRM — deals, persons, organizations, activities, pipelines, products, leads, goals, projects, files, mail, webhooks, subscriptions, notes, stages, users",
|
|
1543
1743
|
baseUrl: "https://api.pipedrive.com/v1",
|
|
1544
1744
|
authType: "api_key",
|
|
1545
1745
|
credentialKeys: ["apiKey"],
|
|
1546
1746
|
capabilities: [
|
|
1547
|
-
{ name: "manage_deals", actions: ["create", "list", "get", "update", "delete"], description: "Full deal lifecycle
|
|
1548
|
-
{ name: "manage_persons", actions: ["create", "list", "get", "update", "delete"], description: "
|
|
1549
|
-
{ name: "manage_organizations", actions: ["create", "list", "get"], description: "
|
|
1550
|
-
{ name: "manage_activities", actions: ["create", "list", "get"], description: "Schedule and
|
|
1551
|
-
{ name: "manage_pipelines", actions: ["list", "get"], description: "
|
|
1552
|
-
{ name: "
|
|
1553
|
-
|
|
1554
|
-
|
|
1747
|
+
{ name: "manage_deals", actions: ["create", "list", "get", "update", "delete", "search", "merge", "duplicate"], description: "Full deal lifecycle with merge and duplicate" },
|
|
1748
|
+
{ name: "manage_persons", actions: ["create", "list", "get", "update", "delete", "search", "merge"], description: "Contact persons with merge" },
|
|
1749
|
+
{ name: "manage_organizations", actions: ["create", "list", "get", "update", "delete", "search", "merge"], description: "Organizations with merge" },
|
|
1750
|
+
{ name: "manage_activities", actions: ["create", "list", "get", "update", "delete"], description: "Schedule, track, and manage activities" },
|
|
1751
|
+
{ name: "manage_pipelines", actions: ["list", "get", "create", "update", "delete"], description: "Pipeline CRUD + stage management" },
|
|
1752
|
+
{ name: "manage_stages", actions: ["list", "get", "create", "update", "delete"], description: "Deal stages within pipelines" },
|
|
1753
|
+
{ name: "manage_products", actions: ["create", "list", "get", "update", "delete", "search"], description: "Product catalog management" },
|
|
1754
|
+
{ name: "manage_leads", actions: ["create", "list", "get", "update", "delete"], description: "Lead management before conversion to deals" },
|
|
1755
|
+
{ name: "manage_notes", actions: ["create", "list", "get", "update", "delete"], description: "Notes on deals, persons, organizations" },
|
|
1756
|
+
{ name: "manage_files", actions: ["list", "get", "create", "delete"], description: "File attachments" },
|
|
1757
|
+
{ name: "manage_mail", actions: ["list_threads", "get_thread", "list_messages", "send"], description: "Email integration" },
|
|
1758
|
+
{ name: "manage_goals", actions: ["create", "list", "get", "update", "delete"], description: "Sales goals and targets" },
|
|
1759
|
+
{ name: "manage_projects", actions: ["create", "list", "get", "update"], description: "Project management" },
|
|
1760
|
+
{ name: "manage_webhooks", actions: ["create", "list", "delete"], description: "Event webhooks" },
|
|
1761
|
+
{ name: "manage_subscriptions", actions: ["create", "list", "get", "update", "cancel"], description: "Recurring revenue subscriptions" },
|
|
1762
|
+
{ name: "manage_users", actions: ["list", "get", "update"], description: "Team user management" },
|
|
1763
|
+
],
|
|
1764
|
+
endpoints: {
|
|
1765
|
+
// Deals
|
|
1555
1766
|
create_deal: { method: "POST", path: "/deals", query: ["api_token"], body: { title: "" } },
|
|
1556
|
-
list_deals: { method: "GET", path: "/deals", query: ["api_token", "start", "limit", "status", "sort"] },
|
|
1767
|
+
list_deals: { method: "GET", path: "/deals", query: ["api_token", "start", "limit", "status", "sort", "filter_id"] },
|
|
1557
1768
|
get_deal: { method: "GET", path: "/deals/{dealId}", query: ["api_token"] },
|
|
1558
1769
|
update_deal: { method: "PUT", path: "/deals/{dealId}", query: ["api_token"], body: {} },
|
|
1559
1770
|
delete_deal: { method: "DELETE", path: "/deals/{dealId}", query: ["api_token"] },
|
|
1771
|
+
search_deals: { method: "GET", path: "/deals/search", query: ["api_token", "term", "fields", "exact_match", "start", "limit"] },
|
|
1772
|
+
merge_deals: { method: "PUT", path: "/deals/{dealId}/merge", query: ["api_token"], body: { merge_with_id: 0 } },
|
|
1773
|
+
duplicate_deal: { method: "POST", path: "/deals/{dealId}/duplicate", query: ["api_token"] },
|
|
1774
|
+
list_deal_activities: { method: "GET", path: "/deals/{dealId}/activities", query: ["api_token", "start", "limit"] },
|
|
1775
|
+
list_deal_files: { method: "GET", path: "/deals/{dealId}/files", query: ["api_token", "start", "limit"] },
|
|
1776
|
+
list_deal_products: { method: "GET", path: "/deals/{dealId}/products", query: ["api_token", "start", "limit"] },
|
|
1777
|
+
add_deal_product: { method: "POST", path: "/deals/{dealId}/products", query: ["api_token"], body: { product_id: 0, item_price: 0, quantity: 1 } },
|
|
1778
|
+
list_deal_participants:{ method: "GET", path: "/deals/{dealId}/participants", query: ["api_token", "start", "limit"] },
|
|
1779
|
+
add_deal_participant: { method: "POST", path: "/deals/{dealId}/participants", query: ["api_token"], body: { person_id: 0 } },
|
|
1780
|
+
list_deal_followers: { method: "GET", path: "/deals/{dealId}/followers", query: ["api_token"] },
|
|
1781
|
+
// Persons
|
|
1560
1782
|
create_person: { method: "POST", path: "/persons", query: ["api_token"], body: { name: "" } },
|
|
1561
|
-
list_persons: { method: "GET", path: "/persons", query: ["api_token", "start", "limit", "sort"] },
|
|
1783
|
+
list_persons: { method: "GET", path: "/persons", query: ["api_token", "start", "limit", "sort", "filter_id"] },
|
|
1562
1784
|
get_person: { method: "GET", path: "/persons/{personId}", query: ["api_token"] },
|
|
1563
1785
|
update_person: { method: "PUT", path: "/persons/{personId}", query: ["api_token"], body: {} },
|
|
1564
1786
|
delete_person: { method: "DELETE", path: "/persons/{personId}", query: ["api_token"] },
|
|
1787
|
+
search_persons: { method: "GET", path: "/persons/search", query: ["api_token", "term", "fields", "exact_match", "start", "limit"] },
|
|
1788
|
+
merge_persons: { method: "PUT", path: "/persons/{personId}/merge", query: ["api_token"], body: { merge_with_id: 0 } },
|
|
1789
|
+
list_person_deals: { method: "GET", path: "/persons/{personId}/deals", query: ["api_token", "start", "limit"] },
|
|
1790
|
+
list_person_activities:{ method: "GET", path: "/persons/{personId}/activities", query: ["api_token", "start", "limit"] },
|
|
1791
|
+
// Organizations
|
|
1565
1792
|
create_organization: { method: "POST", path: "/organizations", query: ["api_token"], body: { name: "" } },
|
|
1566
|
-
list_organizations: { method: "GET", path: "/organizations", query: ["api_token", "start", "limit", "sort"] },
|
|
1793
|
+
list_organizations: { method: "GET", path: "/organizations", query: ["api_token", "start", "limit", "sort", "filter_id"] },
|
|
1794
|
+
get_organization: { method: "GET", path: "/organizations/{orgId}", query: ["api_token"] },
|
|
1795
|
+
update_organization: { method: "PUT", path: "/organizations/{orgId}", query: ["api_token"], body: {} },
|
|
1796
|
+
delete_organization: { method: "DELETE", path: "/organizations/{orgId}", query: ["api_token"] },
|
|
1797
|
+
search_organizations: { method: "GET", path: "/organizations/search", query: ["api_token", "term", "fields", "exact_match"] },
|
|
1798
|
+
merge_organizations: { method: "PUT", path: "/organizations/{orgId}/merge", query: ["api_token"], body: { merge_with_id: 0 } },
|
|
1799
|
+
// Activities
|
|
1567
1800
|
create_activity: { method: "POST", path: "/activities", query: ["api_token"], body: { subject: "", type: "" } },
|
|
1568
|
-
list_activities: { method: "GET", path: "/activities", query: ["api_token", "start", "limit", "type"] },
|
|
1801
|
+
list_activities: { method: "GET", path: "/activities", query: ["api_token", "start", "limit", "type", "user_id", "done"] },
|
|
1802
|
+
get_activity: { method: "GET", path: "/activities/{activityId}", query: ["api_token"] },
|
|
1803
|
+
update_activity: { method: "PUT", path: "/activities/{activityId}", query: ["api_token"], body: {} },
|
|
1804
|
+
delete_activity: { method: "DELETE", path: "/activities/{activityId}", query: ["api_token"] },
|
|
1805
|
+
// Pipelines + Stages
|
|
1569
1806
|
list_pipelines: { method: "GET", path: "/pipelines", query: ["api_token"] },
|
|
1570
1807
|
get_pipeline: { method: "GET", path: "/pipelines/{pipelineId}", query: ["api_token"] },
|
|
1808
|
+
create_pipeline: { method: "POST", path: "/pipelines", query: ["api_token"], body: { name: "" } },
|
|
1809
|
+
update_pipeline: { method: "PUT", path: "/pipelines/{pipelineId}", query: ["api_token"], body: {} },
|
|
1810
|
+
delete_pipeline: { method: "DELETE", path: "/pipelines/{pipelineId}", query: ["api_token"] },
|
|
1811
|
+
list_stages: { method: "GET", path: "/stages", query: ["api_token", "pipeline_id"] },
|
|
1812
|
+
get_stage: { method: "GET", path: "/stages/{stageId}", query: ["api_token"] },
|
|
1813
|
+
create_stage: { method: "POST", path: "/stages", query: ["api_token"], body: { name: "", pipeline_id: 0 } },
|
|
1814
|
+
update_stage: { method: "PUT", path: "/stages/{stageId}", query: ["api_token"], body: {} },
|
|
1815
|
+
delete_stage: { method: "DELETE", path: "/stages/{stageId}", query: ["api_token"] },
|
|
1816
|
+
list_stage_deals: { method: "GET", path: "/stages/{stageId}/deals", query: ["api_token", "start", "limit"] },
|
|
1817
|
+
// Products
|
|
1818
|
+
create_product: { method: "POST", path: "/products", query: ["api_token"], body: { name: "" } },
|
|
1819
|
+
list_products: { method: "GET", path: "/products", query: ["api_token", "start", "limit"] },
|
|
1820
|
+
get_product: { method: "GET", path: "/products/{productId}", query: ["api_token"] },
|
|
1821
|
+
update_product: { method: "PUT", path: "/products/{productId}", query: ["api_token"], body: {} },
|
|
1822
|
+
delete_product: { method: "DELETE", path: "/products/{productId}", query: ["api_token"] },
|
|
1823
|
+
search_products: { method: "GET", path: "/products/search", query: ["api_token", "term", "fields"] },
|
|
1824
|
+
// Leads
|
|
1825
|
+
create_lead: { method: "POST", path: "/leads", query: ["api_token"], body: { title: "" } },
|
|
1826
|
+
list_leads: { method: "GET", path: "/leads", query: ["api_token", "start", "limit", "sort", "filter_id"] },
|
|
1827
|
+
get_lead: { method: "GET", path: "/leads/{leadId}", query: ["api_token"] },
|
|
1828
|
+
update_lead: { method: "PATCH", path: "/leads/{leadId}", query: ["api_token"], body: {} },
|
|
1829
|
+
delete_lead: { method: "DELETE", path: "/leads/{leadId}", query: ["api_token"] },
|
|
1830
|
+
// Notes
|
|
1571
1831
|
create_note: { method: "POST", path: "/notes", query: ["api_token"], body: { content: "" } },
|
|
1572
1832
|
list_notes: { method: "GET", path: "/notes", query: ["api_token", "start", "limit", "sort"] },
|
|
1573
|
-
|
|
1833
|
+
get_note: { method: "GET", path: "/notes/{noteId}", query: ["api_token"] },
|
|
1834
|
+
update_note: { method: "PUT", path: "/notes/{noteId}", query: ["api_token"], body: {} },
|
|
1835
|
+
delete_note: { method: "DELETE", path: "/notes/{noteId}", query: ["api_token"] },
|
|
1836
|
+
// Files
|
|
1837
|
+
list_files: { method: "GET", path: "/files", query: ["api_token", "start", "limit", "sort"] },
|
|
1838
|
+
get_file: { method: "GET", path: "/files/{fileId}", query: ["api_token"] },
|
|
1839
|
+
delete_file: { method: "DELETE", path: "/files/{fileId}", query: ["api_token"] },
|
|
1840
|
+
// Mail
|
|
1841
|
+
list_mail_threads: { method: "GET", path: "/mailbox/mailThreads", query: ["api_token", "folder", "start", "limit"] },
|
|
1842
|
+
get_mail_thread: { method: "GET", path: "/mailbox/mailThreads/{threadId}", query: ["api_token"] },
|
|
1843
|
+
list_mail_messages: { method: "GET", path: "/mailbox/mailMessages", query: ["api_token", "start", "limit"] },
|
|
1844
|
+
// Goals
|
|
1845
|
+
create_goal: { method: "POST", path: "/goals", query: ["api_token"], body: { title: "", assignee: {} } },
|
|
1846
|
+
list_goals: { method: "GET", path: "/goals", query: ["api_token"] },
|
|
1847
|
+
get_goal: { method: "GET", path: "/goals/{goalId}", query: ["api_token"] },
|
|
1848
|
+
update_goal: { method: "PUT", path: "/goals/{goalId}", query: ["api_token"], body: {} },
|
|
1849
|
+
delete_goal: { method: "DELETE", path: "/goals/{goalId}", query: ["api_token"] },
|
|
1850
|
+
// Projects
|
|
1851
|
+
create_project: { method: "POST", path: "/projects", query: ["api_token"], body: { title: "", board_id: 0 } },
|
|
1852
|
+
list_projects: { method: "GET", path: "/projects", query: ["api_token", "start", "limit", "status"] },
|
|
1853
|
+
get_project: { method: "GET", path: "/projects/{projectId}", query: ["api_token"] },
|
|
1854
|
+
update_project: { method: "PUT", path: "/projects/{projectId}", query: ["api_token"], body: {} },
|
|
1855
|
+
// Webhooks
|
|
1856
|
+
create_webhook: { method: "POST", path: "/webhooks", query: ["api_token"], body: { subscription_url: "", event_action: "", event_object: "" } },
|
|
1857
|
+
list_webhooks: { method: "GET", path: "/webhooks", query: ["api_token"] },
|
|
1858
|
+
delete_webhook: { method: "DELETE", path: "/webhooks/{webhookId}", query: ["api_token"] },
|
|
1859
|
+
// Subscriptions
|
|
1860
|
+
create_subscription: { method: "POST", path: "/subscriptions/recurring", query: ["api_token"], body: { deal_id: 0, currency: "USD" } },
|
|
1861
|
+
list_subscriptions: { method: "GET", path: "/subscriptions/{dealId}", query: ["api_token"] },
|
|
1862
|
+
get_subscription: { method: "GET", path: "/subscriptions/{subscriptionId}", query: ["api_token"] },
|
|
1863
|
+
update_subscription: { method: "PUT", path: "/subscriptions/recurring/{subscriptionId}", query: ["api_token"], body: {} },
|
|
1864
|
+
cancel_subscription: { method: "DELETE", path: "/subscriptions/recurring/{subscriptionId}", query: ["api_token"] },
|
|
1865
|
+
// Users
|
|
1866
|
+
list_users: { method: "GET", path: "/users", query: ["api_token"] },
|
|
1867
|
+
get_user: { method: "GET", path: "/users/{userId}", query: ["api_token"] },
|
|
1868
|
+
update_user: { method: "PUT", path: "/users/{userId}", query: ["api_token"], body: {} },
|
|
1869
|
+
// Search
|
|
1870
|
+
search_items: { method: "GET", path: "/itemSearch", query: ["api_token", "term", "item_types", "fields", "exact_match", "start", "limit"] },
|
|
1871
|
+
search_field: { method: "GET", path: "/itemSearch/field", query: ["api_token", "term", "field_type", "field_key", "exact_match"] },
|
|
1872
|
+
// Filters
|
|
1873
|
+
list_filters: { method: "GET", path: "/filters", query: ["api_token", "type"] },
|
|
1874
|
+
get_filter: { method: "GET", path: "/filters/{filterId}", query: ["api_token"] },
|
|
1875
|
+
create_filter: { method: "POST", path: "/filters", query: ["api_token"], body: { name: "", type: "", conditions: {} } },
|
|
1876
|
+
// Recents
|
|
1877
|
+
list_recents: { method: "GET", path: "/recents", query: ["api_token", "since_timestamp", "items"] },
|
|
1574
1878
|
},
|
|
1575
1879
|
authHeader: (creds) => ({
|
|
1576
1880
|
"Content-Type": "application/json",
|
|
@@ -1581,25 +1885,86 @@ export const SERVICE_CATALOG = {
|
|
|
1581
1885
|
linkedin: {
|
|
1582
1886
|
name: "LinkedIn",
|
|
1583
1887
|
type: "social",
|
|
1584
|
-
description: "Professional network — posts,
|
|
1585
|
-
baseUrl: "https://api.linkedin.com
|
|
1586
|
-
authType: "
|
|
1888
|
+
description: "Professional network — profile, posts, comments, likes, organizations, page analytics, events, advertising, ad reporting via LinkedIn API v2",
|
|
1889
|
+
baseUrl: "https://api.linkedin.com",
|
|
1890
|
+
authType: "oauth2",
|
|
1891
|
+
scopes: ["rw_organization_admin", "w_member_social", "r_profile_basicinfo", "rw_events", "r_ads", "r_basicprofile", "r_organization_admin", "email", "r_1st_connections_size", "openid", "profile", "r_ads_reporting", "r_organization_social", "r_verify", "w_organization_social", "rw_ads", "r_events"],
|
|
1587
1892
|
credentialKeys: ["access_token"],
|
|
1588
1893
|
capabilities: [
|
|
1589
|
-
{ name: "
|
|
1590
|
-
{ name: "
|
|
1591
|
-
{ name: "
|
|
1592
|
-
{ name: "
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1894
|
+
{ name: "manage_profile", actions: ["get", "get_email", "get_connections", "get_verification", "get_photos"], description: "View profile, email, connections count, verification status, and photos" },
|
|
1895
|
+
{ name: "manage_posts", actions: ["create", "get", "delete"], description: "Create, read, and delete posts for members or organizations" },
|
|
1896
|
+
{ name: "manage_social_actions", actions: ["comment", "list_comments", "like", "unlike"], description: "Comment on and like/unlike posts" },
|
|
1897
|
+
{ name: "manage_shares", actions: ["list"], description: "List shared content" },
|
|
1898
|
+
{ name: "manage_media", actions: ["upload_image", "upload_video"], description: "Upload images and videos for posts" },
|
|
1899
|
+
{ name: "manage_organizations", actions: ["get", "list_admin_orgs", "update", "get_brand_pages"], description: "View and manage organization pages" },
|
|
1900
|
+
{ name: "manage_org_analytics", actions: ["page_stats", "follower_stats", "share_stats", "follower_count", "visitor_stats"], description: "Organization page analytics and statistics" },
|
|
1901
|
+
{ name: "manage_ads", actions: ["list_accounts", "get_account", "create_campaign_group", "list_campaign_groups", "create_campaign", "list_campaigns", "update_campaign", "create_creative", "list_creatives", "update_creative"], description: "Manage ad accounts, campaigns, and creatives" },
|
|
1902
|
+
{ name: "manage_ad_extras", actions: ["get_analytics", "get_budget_pricing", "create_sponsored_content", "get_targeting", "get_form_responses"], description: "Ad analytics, targeting, budget suggestions, and lead gen forms" },
|
|
1903
|
+
{ name: "manage_ad_reporting", actions: ["get_performance", "get_statistics", "get_conversions", "get_budget_reports", "get_inmail_analytics"], description: "Campaign performance metrics, conversion tracking, and InMail analytics" },
|
|
1904
|
+
{ name: "manage_events", actions: ["create", "get", "update", "delete", "list_attendees"], description: "Create, manage, and track events and attendees" },
|
|
1905
|
+
],
|
|
1906
|
+
endpoints: {
|
|
1907
|
+
// ── Profile (5) ───────────────────────────────────────────
|
|
1908
|
+
get_profile: { method: "GET", path: "/v2/me", query: ["projection"] },
|
|
1909
|
+
get_email: { method: "GET", path: "/v2/emailAddress", query: ["q=members", "projection=(elements*(handle~))"] },
|
|
1910
|
+
get_connections_size: { method: "GET", path: "/v2/connections", query: ["q=viewer", "start", "count"] },
|
|
1911
|
+
get_verification: { method: "GET", path: "/v2/profileVerification", query: ["q=member"] },
|
|
1912
|
+
get_profile_pictures: { method: "GET", path: "/v2/profilePictures", query: ["q=member", "projection"] },
|
|
1913
|
+
|
|
1914
|
+
// ── Social / Posts (10) ───────────────────────────────────
|
|
1915
|
+
create_post: { method: "POST", path: "/v2/posts", body: { author: "", commentary: "", visibility: "PUBLIC", distribution: { feedDistribution: "MAIN_FEED" }, lifecycleState: "PUBLISHED" } },
|
|
1916
|
+
get_post: { method: "GET", path: "/v2/posts/{postId}" },
|
|
1917
|
+
delete_post: { method: "DELETE", path: "/v2/posts/{postId}" },
|
|
1918
|
+
add_comment: { method: "POST", path: "/v2/socialActions/{activityId}/comments", body: { actor: "", message: { text: "" } } },
|
|
1919
|
+
list_comments: { method: "GET", path: "/v2/socialActions/{activityId}/comments", query: ["start", "count"] },
|
|
1920
|
+
like_post: { method: "POST", path: "/v2/socialActions/{activityId}/likes", body: { actor: "" } },
|
|
1921
|
+
unlike_post: { method: "DELETE", path: "/v2/socialActions/{activityId}/likes/{likeId}" },
|
|
1922
|
+
list_shares: { method: "GET", path: "/v2/shares", query: ["q", "owners", "count", "start"] },
|
|
1923
|
+
upload_image: { method: "POST", path: "/v2/images", query: ["action=initializeUpload"], body: { initializeUploadRequest: { owner: "" } } },
|
|
1924
|
+
upload_video: { method: "POST", path: "/v2/videos", query: ["action=initializeUpload"], body: { initializeUploadRequest: { owner: "", fileSizeBytes: 0 } } },
|
|
1925
|
+
|
|
1926
|
+
// ── Organization Pages (10) ───────────────────────────────
|
|
1927
|
+
get_organization: { method: "GET", path: "/v2/organizations/{organizationId}", query: ["projection"] },
|
|
1928
|
+
list_admin_orgs: { method: "GET", path: "/v2/organizationalEntityAcls", query: ["q=roleAssignee", "role", "projection"] },
|
|
1929
|
+
create_org_post: { method: "POST", path: "/v2/posts", body: { author: "urn:li:organization:{organizationId}", commentary: "", visibility: "PUBLIC", distribution: { feedDistribution: "MAIN_FEED" }, lifecycleState: "PUBLISHED" } },
|
|
1930
|
+
get_page_statistics: { method: "GET", path: "/v2/organizationPageStatistics", query: ["q=organization", "organization", "timeIntervals"] },
|
|
1931
|
+
get_follower_statistics: { method: "GET", path: "/v2/organizationalEntityFollowerStatistics", query: ["q=organizationalEntity", "organizationalEntity", "timeIntervals"] },
|
|
1932
|
+
get_share_statistics: { method: "GET", path: "/v2/organizationalEntityShareStatistics", query: ["q=organizationalEntity", "organizationalEntity", "shares"] },
|
|
1933
|
+
get_follower_count: { method: "GET", path: "/v2/networkSizes/{organizationUrn}", query: ["edgeType=CompanyFollowedByMember"] },
|
|
1934
|
+
update_organization: { method: "PUT", path: "/v2/organizations/{organizationId}", body: {} },
|
|
1935
|
+
get_brand_pages: { method: "GET", path: "/v2/organizationBrandPages", query: ["q=parentOrganization", "parentOrganization"] },
|
|
1936
|
+
get_visitor_statistics: { method: "GET", path: "/v2/organizationPageVisitorStatistics", query: ["q=organization", "organization", "timeIntervals"] },
|
|
1937
|
+
|
|
1938
|
+
// ── Advertising (15) ──────────────────────────────────────
|
|
1939
|
+
list_ad_accounts: { method: "GET", path: "/v2/adAccountsV2", query: ["q=search", "search", "count", "start"] },
|
|
1940
|
+
get_ad_account: { method: "GET", path: "/v2/adAccountsV2/{adAccountId}" },
|
|
1941
|
+
create_campaign_group: { method: "POST", path: "/v2/adCampaignGroupsV2", body: { account: "", name: "", status: "ACTIVE" } },
|
|
1942
|
+
list_campaign_groups: { method: "GET", path: "/v2/adCampaignGroupsV2", query: ["q=search", "search", "count", "start"] },
|
|
1943
|
+
create_campaign: { method: "POST", path: "/v2/adCampaignsV2", body: { account: "", campaignGroup: "", name: "", type: "SPONSORED_UPDATES", costType: "CPM", status: "PAUSED" } },
|
|
1944
|
+
list_campaigns: { method: "GET", path: "/v2/adCampaignsV2", query: ["q=search", "search", "count", "start"] },
|
|
1945
|
+
update_campaign: { method: "PATCH", path: "/v2/adCampaignsV2/{campaignId}", body: {} },
|
|
1946
|
+
create_creative: { method: "POST", path: "/v2/adCreativesV2", body: { campaign: "", reference: "" } },
|
|
1947
|
+
list_creatives: { method: "GET", path: "/v2/adCreativesV2", query: ["q=search", "search", "campaigns", "count"] },
|
|
1948
|
+
update_creative: { method: "PATCH", path: "/v2/adCreativesV2/{creativeId}", body: {} },
|
|
1949
|
+
get_ad_analytics: { method: "GET", path: "/v2/adAnalyticsV2", query: ["q=analytics", "dateRange", "campaigns", "pivot", "timeGranularity", "fields"] },
|
|
1950
|
+
get_budget_pricing: { method: "GET", path: "/v2/adBudgetPricingV2", query: ["account", "campaign", "bidType", "match"] },
|
|
1951
|
+
create_sponsored_content: { method: "POST", path: "/v2/adDirectSponsoredContents", body: { account: "", owner: "", content: {} } },
|
|
1952
|
+
get_targeting_facets: { method: "GET", path: "/v2/adTargetingFacets", query: ["q=search", "search", "queryType"] },
|
|
1953
|
+
get_form_responses: { method: "GET", path: "/v2/adFormResponses", query: ["q=account", "account", "versionedLeadGenFormUrn", "count", "start"] },
|
|
1954
|
+
|
|
1955
|
+
// ── Ad Reporting (5) ──────────────────────────────────────
|
|
1956
|
+
get_performance_metrics: { method: "GET", path: "/v2/adAnalyticsV2", query: ["q=analytics", "dateRange", "accounts", "campaigns", "creatives", "pivot", "timeGranularity", "fields"] },
|
|
1957
|
+
get_aggregate_statistics: { method: "GET", path: "/v2/adAnalyticsV2", query: ["q=statistics", "accounts", "dateRange", "fields"] },
|
|
1958
|
+
get_conversion_tracking: { method: "GET", path: "/v2/conversionTrackingV2", query: ["q=account", "account", "count", "start"] },
|
|
1959
|
+
get_budget_reports: { method: "GET", path: "/v2/adBudgetV2", query: ["q=account", "account", "count", "start"] },
|
|
1960
|
+
get_inmail_analytics: { method: "GET", path: "/v2/adInMailContentV2", query: ["q=account", "account", "campaign", "count", "start"] },
|
|
1961
|
+
|
|
1962
|
+
// ── Events (5) ────────────────────────────────────────────
|
|
1963
|
+
create_event: { method: "POST", path: "/v2/events", body: { organizer: "", name: { locale: { language: "en", country: "US" }, value: "" }, description: {}, startAt: "", endAt: "" } },
|
|
1964
|
+
get_event: { method: "GET", path: "/v2/events/{eventId}" },
|
|
1965
|
+
update_event: { method: "PUT", path: "/v2/events/{eventId}", body: {} },
|
|
1966
|
+
delete_event: { method: "DELETE", path: "/v2/events/{eventId}" },
|
|
1967
|
+
list_event_attendees: { method: "GET", path: "/v2/eventAttendees", query: ["q=event", "event", "count", "start"] },
|
|
1603
1968
|
},
|
|
1604
1969
|
authHeader: (creds) => ({
|
|
1605
1970
|
"Authorization": `Bearer ${creds.access_token}`,
|
|
@@ -2899,6 +3264,74 @@ export const SERVICE_CATALOG = {
|
|
|
2899
3264
|
authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
|
|
2900
3265
|
},
|
|
2901
3266
|
|
|
3267
|
+
// ── CloudConvert ────────────────────────────────────────────────
|
|
3268
|
+
cloudconvert: {
|
|
3269
|
+
name: "CloudConvert",
|
|
3270
|
+
type: "utility",
|
|
3271
|
+
description: "File conversion API — convert between 200+ formats (PDF, DOCX, PNG, MP4, etc.), optimize, merge, capture websites, create thumbnails",
|
|
3272
|
+
baseUrl: "https://api.cloudconvert.com/v2",
|
|
3273
|
+
authType: "apiKey",
|
|
3274
|
+
credentialKeys: ["apiKey"],
|
|
3275
|
+
capabilities: [
|
|
3276
|
+
"convert files between 200+ formats",
|
|
3277
|
+
"merge PDFs and documents",
|
|
3278
|
+
"optimize images and PDFs",
|
|
3279
|
+
"capture website screenshots",
|
|
3280
|
+
"create thumbnails from documents",
|
|
3281
|
+
"extract text from PDFs (OCR)",
|
|
3282
|
+
"convert spreadsheets to CSV/JSON",
|
|
3283
|
+
"watermark PDFs",
|
|
3284
|
+
"compress videos",
|
|
3285
|
+
"manage conversion jobs and tasks",
|
|
3286
|
+
],
|
|
3287
|
+
endpoints: {
|
|
3288
|
+
// Jobs (multi-step conversion pipelines)
|
|
3289
|
+
create_job: { method: "POST", path: "/jobs", body: { tasks: {} } },
|
|
3290
|
+
list_jobs: { method: "GET", path: "/jobs", query: ["status", "tag", "per_page", "page"] },
|
|
3291
|
+
get_job: { method: "GET", path: "/jobs/{jobId}" },
|
|
3292
|
+
delete_job: { method: "DELETE", path: "/jobs/{jobId}" },
|
|
3293
|
+
wait_job: { method: "GET", path: "/jobs/{jobId}/wait" },
|
|
3294
|
+
|
|
3295
|
+
// Tasks
|
|
3296
|
+
create_task: { method: "POST", path: "/tasks", body: { operation: "", input: "" } },
|
|
3297
|
+
list_tasks: { method: "GET", path: "/tasks", query: ["status", "operation", "job_id", "per_page", "page"] },
|
|
3298
|
+
get_task: { method: "GET", path: "/tasks/{taskId}" },
|
|
3299
|
+
delete_task: { method: "DELETE", path: "/tasks/{taskId}" },
|
|
3300
|
+
wait_task: { method: "GET", path: "/tasks/{taskId}/wait" },
|
|
3301
|
+
cancel_task: { method: "POST", path: "/tasks/{taskId}/cancel" },
|
|
3302
|
+
retry_task: { method: "POST", path: "/tasks/{taskId}/retry" },
|
|
3303
|
+
|
|
3304
|
+
// Conversion operations
|
|
3305
|
+
convert: { method: "POST", path: "/convert", body: { input: "", input_format: "", output_format: "" } },
|
|
3306
|
+
optimize: { method: "POST", path: "/optimize", body: { input: "", input_format: "" } },
|
|
3307
|
+
capture_website: { method: "POST", path: "/capture-website", body: { url: "", output_format: "pdf" } },
|
|
3308
|
+
create_thumbnail: { method: "POST", path: "/thumbnail", body: { input: "", output_format: "png" } },
|
|
3309
|
+
merge: { method: "POST", path: "/merge", body: { input: [], output_format: "pdf" } },
|
|
3310
|
+
create_archive: { method: "POST", path: "/archive", body: { input: [], output_format: "zip" } },
|
|
3311
|
+
watermark: { method: "POST", path: "/watermark", body: { input: "", input_format: "pdf" } },
|
|
3312
|
+
metadata: { method: "POST", path: "/metadata", body: { input: "", input_format: "" } },
|
|
3313
|
+
|
|
3314
|
+
// Import/Export (file transfer)
|
|
3315
|
+
import_url: { method: "POST", path: "/import/url", body: { url: "" } },
|
|
3316
|
+
import_upload: { method: "POST", path: "/import/upload" },
|
|
3317
|
+
import_s3: { method: "POST", path: "/import/s3", body: { bucket: "", region: "", key: "" } },
|
|
3318
|
+
import_google_cloud: { method: "POST", path: "/import/google-cloud-storage", body: { bucket: "", key: "" } },
|
|
3319
|
+
export_url: { method: "POST", path: "/export/url", body: { input: "" } },
|
|
3320
|
+
export_s3: { method: "POST", path: "/export/s3", body: { input: "", bucket: "", region: "", key: "" } },
|
|
3321
|
+
export_google_cloud: { method: "POST", path: "/export/google-cloud-storage", body: { input: "", bucket: "", key: "" } },
|
|
3322
|
+
|
|
3323
|
+
// Users & Usage
|
|
3324
|
+
get_user: { method: "GET", path: "/users/me" },
|
|
3325
|
+
get_balance: { method: "GET", path: "/users/me/balance" },
|
|
3326
|
+
|
|
3327
|
+
// Webhooks
|
|
3328
|
+
create_webhook: { method: "POST", path: "/webhooks", body: { url: "", events: [] } },
|
|
3329
|
+
list_webhooks: { method: "GET", path: "/webhooks" },
|
|
3330
|
+
delete_webhook: { method: "DELETE", path: "/webhooks/{webhookId}" },
|
|
3331
|
+
},
|
|
3332
|
+
authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
|
|
3333
|
+
},
|
|
3334
|
+
|
|
2902
3335
|
};
|
|
2903
3336
|
|
|
2904
3337
|
// ── Helpers ────────────────────────────────────────────────
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0n Knowledge Layers — Patent #5 Prototype Implementation
|
|
3
|
+
*
|
|
4
|
+
* User-Configurable Multi-Layer AI Knowledge Architecture
|
|
5
|
+
* with Cross-Platform Portable Deployment and Automatic
|
|
6
|
+
* Capability Discovery via Service Connection
|
|
7
|
+
*
|
|
8
|
+
* US Provisional Patent — RocketOpp LLC
|
|
9
|
+
* Inventor: Michael A. Mento Jr.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
// ── Layer Taxonomy (K1-K7) ──────────────────────────────────────────
|
|
15
|
+
|
|
16
|
+
const LAYER_SCHEMA = {
|
|
17
|
+
brand_voice: {
|
|
18
|
+
id: 'K1',
|
|
19
|
+
name: 'Brand Voice',
|
|
20
|
+
description: 'Brand identity, tone, communication style',
|
|
21
|
+
composition: 'override', // User layer replaces defaults entirely
|
|
22
|
+
fields: ['tone', 'formality', 'humor', 'vocabulary_additions', 'vocabulary_prohibitions', 'style_rules', 'personality_attributes'],
|
|
23
|
+
},
|
|
24
|
+
terminology: {
|
|
25
|
+
id: 'K2',
|
|
26
|
+
name: 'Terminology',
|
|
27
|
+
description: 'Business-specific terms, acronyms, slang',
|
|
28
|
+
composition: 'merge', // User values merge with defaults
|
|
29
|
+
fields: ['acronyms', 'proper_nouns', 'slang', 'corrections', 'industry_terms'],
|
|
30
|
+
},
|
|
31
|
+
business_structure: {
|
|
32
|
+
id: 'K3',
|
|
33
|
+
name: 'Business Structure',
|
|
34
|
+
description: 'Organizational context, services, team',
|
|
35
|
+
composition: 'merge',
|
|
36
|
+
fields: ['business_name', 'phone', 'email', 'address', 'hours', 'timezone', 'team', 'departments', 'services', 'pricing'],
|
|
37
|
+
},
|
|
38
|
+
visual_identity: {
|
|
39
|
+
id: 'K4',
|
|
40
|
+
name: 'Visual Identity',
|
|
41
|
+
description: 'Brand colors, typography, visual preferences',
|
|
42
|
+
composition: 'override',
|
|
43
|
+
fields: ['primary_color', 'secondary_color', 'accent_color', 'font_display', 'font_body', 'logo_url', 'icon_style', 'theme_preference'],
|
|
44
|
+
},
|
|
45
|
+
domain_knowledge: {
|
|
46
|
+
id: 'K5',
|
|
47
|
+
name: 'Domain Knowledge',
|
|
48
|
+
description: 'Industry expertise, FAQs, procedures',
|
|
49
|
+
composition: 'append', // Adds to defaults, never removes
|
|
50
|
+
fields: ['faq_pairs', 'procedures', 'compliance', 'best_practices', 'competitive_positioning', 'unique_selling_points'],
|
|
51
|
+
},
|
|
52
|
+
credentials: {
|
|
53
|
+
id: 'K6',
|
|
54
|
+
name: 'Credentials',
|
|
55
|
+
description: 'API keys, tokens, service endpoints',
|
|
56
|
+
composition: 'replace', // User layer is sole source
|
|
57
|
+
fields: ['api_keys', 'oauth_tokens', 'webhook_urls', 'mcp_configs', 'service_endpoints'],
|
|
58
|
+
encrypted: true, // Double-encrypted via Argon2id per 0nVault patent
|
|
59
|
+
},
|
|
60
|
+
operational_context: {
|
|
61
|
+
id: 'K7',
|
|
62
|
+
name: 'Operational Context',
|
|
63
|
+
description: 'Runtime state, history, active workflows',
|
|
64
|
+
composition: 'append',
|
|
65
|
+
fields: ['active_workflows', 'recent_interactions', 'pending_tasks', 'calendar_state', 'pipeline_state', 'seasonal_context'],
|
|
66
|
+
system_managed: true, // Updated automatically, not user-edited
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// ── Known Credential Patterns ───────────────────────────────────────
|
|
71
|
+
|
|
72
|
+
const CREDENTIAL_PATTERNS = [
|
|
73
|
+
{ pattern: /^sk-ant-/, service: 'anthropic', name: 'Anthropic API Key' },
|
|
74
|
+
{ pattern: /^sk-[a-zA-Z0-9]{48}/, service: 'openai', name: 'OpenAI API Key' },
|
|
75
|
+
{ pattern: /^rk_live_/, service: 'stripe', name: 'Stripe Secret Key' },
|
|
76
|
+
{ pattern: /^pk_live_/, service: 'stripe', name: 'Stripe Publishable Key' },
|
|
77
|
+
{ pattern: /^whsec_/, service: 'stripe', name: 'Stripe Webhook Secret' },
|
|
78
|
+
{ pattern: /^pit-[a-f0-9-]{36}$/, service: 'crm', name: 'CRM PIT Token' },
|
|
79
|
+
{ pattern: /^xoxb-/, service: 'slack', name: 'Slack Bot Token' },
|
|
80
|
+
{ pattern: /^xoxp-/, service: 'slack', name: 'Slack User Token' },
|
|
81
|
+
{ pattern: /^gsk_/, service: 'groq', name: 'Groq API Key' },
|
|
82
|
+
{ pattern: /^SG\./, service: 'sendgrid', name: 'SendGrid API Key' },
|
|
83
|
+
{ pattern: /^AC[a-f0-9]{32}$/, service: 'twilio', name: 'Twilio Account SID' },
|
|
84
|
+
{ pattern: /^ghp_/, service: 'github', name: 'GitHub Personal Access Token' },
|
|
85
|
+
{ pattern: /^gho_/, service: 'github', name: 'GitHub OAuth Token' },
|
|
86
|
+
{ pattern: /^eyJ[A-Za-z0-9_-]+\.eyJ/, service: 'supabase', name: 'Supabase JWT' },
|
|
87
|
+
{ pattern: /^AKIA[A-Z0-9]{16}$/, service: 'aws', name: 'AWS Access Key' },
|
|
88
|
+
{ pattern: /^AIza[A-Za-z0-9_-]{35}$/, service: 'google', name: 'Google API Key' },
|
|
89
|
+
{ pattern: /^re_[A-Za-z0-9]+$/, service: 'resend', name: 'Resend API Key' },
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
// ── Knowledge Layer Manager ─────────────────────────────────────────
|
|
93
|
+
|
|
94
|
+
class KnowledgeLayers {
|
|
95
|
+
|
|
96
|
+
constructor(locationId) {
|
|
97
|
+
this.locationId = locationId;
|
|
98
|
+
this.layers = {};
|
|
99
|
+
this.completion = { total: 0, filled: 0, pct: 0, missing: [] };
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Load layers from vault data.
|
|
104
|
+
*/
|
|
105
|
+
load(vaultData) {
|
|
106
|
+
for (const [key, schema] of Object.entries(LAYER_SCHEMA)) {
|
|
107
|
+
this.layers[key] = {
|
|
108
|
+
...schema,
|
|
109
|
+
data: vaultData?.[key] || {},
|
|
110
|
+
version: vaultData?.[key]?._version || 1,
|
|
111
|
+
updated_at: vaultData?.[key]?._updated_at || null,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Update a specific field in a layer.
|
|
119
|
+
*/
|
|
120
|
+
updateField(layerKey, field, value) {
|
|
121
|
+
if (!this.layers[layerKey]) throw new Error(`Unknown layer: ${layerKey}`);
|
|
122
|
+
if (!this.layers[layerKey].data) this.layers[layerKey].data = {};
|
|
123
|
+
this.layers[layerKey].data[field] = value;
|
|
124
|
+
this.layers[layerKey].version++;
|
|
125
|
+
this.layers[layerKey].updated_at = new Date().toISOString();
|
|
126
|
+
return this;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Compose layers using the defined strategies.
|
|
131
|
+
* Merges user data with defaults according to each layer's composition type.
|
|
132
|
+
*/
|
|
133
|
+
compose(defaults = {}) {
|
|
134
|
+
const result = {};
|
|
135
|
+
|
|
136
|
+
for (const [key, layer] of Object.entries(this.layers)) {
|
|
137
|
+
const userLayer = layer.data || {};
|
|
138
|
+
const defaultLayer = defaults[key] || {};
|
|
139
|
+
const strategy = layer.composition;
|
|
140
|
+
|
|
141
|
+
switch (strategy) {
|
|
142
|
+
case 'override':
|
|
143
|
+
// User layer completely replaces default
|
|
144
|
+
result[key] = Object.keys(userLayer).length > 0 ? userLayer : defaultLayer;
|
|
145
|
+
break;
|
|
146
|
+
|
|
147
|
+
case 'merge':
|
|
148
|
+
// Merge: user values take precedence for duplicate keys
|
|
149
|
+
result[key] = { ...defaultLayer, ...userLayer };
|
|
150
|
+
break;
|
|
151
|
+
|
|
152
|
+
case 'append':
|
|
153
|
+
// Append: combine arrays, merge objects, user values added
|
|
154
|
+
result[key] = {};
|
|
155
|
+
for (const field of new Set([...Object.keys(defaultLayer), ...Object.keys(userLayer)])) {
|
|
156
|
+
const dv = defaultLayer[field];
|
|
157
|
+
const uv = userLayer[field];
|
|
158
|
+
if (Array.isArray(dv) && Array.isArray(uv)) {
|
|
159
|
+
result[key][field] = [...dv, ...uv];
|
|
160
|
+
} else if (typeof dv === 'object' && typeof uv === 'object' && dv && uv) {
|
|
161
|
+
result[key][field] = { ...dv, ...uv };
|
|
162
|
+
} else {
|
|
163
|
+
result[key][field] = uv !== undefined ? uv : dv;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
|
|
168
|
+
case 'replace':
|
|
169
|
+
// Replace: user layer only, ignore defaults
|
|
170
|
+
result[key] = userLayer;
|
|
171
|
+
break;
|
|
172
|
+
|
|
173
|
+
default:
|
|
174
|
+
result[key] = { ...defaultLayer, ...userLayer };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Resolve cross-layer template references.
|
|
183
|
+
* "Always refer to {{business_structure.business_name}} in full"
|
|
184
|
+
* → "Always refer to The Spa In Ligonier in full"
|
|
185
|
+
*/
|
|
186
|
+
resolveReferences(text, composedLayers) {
|
|
187
|
+
return text.replace(/\{\{(\w+)\.(\w+)\}\}/g, (match, layerKey, field) => {
|
|
188
|
+
const layer = composedLayers[layerKey];
|
|
189
|
+
if (layer && layer[field] !== undefined) {
|
|
190
|
+
return String(layer[field]);
|
|
191
|
+
}
|
|
192
|
+
return match; // Keep unresolved references as-is
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Adapt composed layers to a specific platform format.
|
|
198
|
+
*/
|
|
199
|
+
adaptForPlatform(platform, composedLayers) {
|
|
200
|
+
const adapters = {
|
|
201
|
+
'openai': () => this._adaptOpenAI(composedLayers),
|
|
202
|
+
'anthropic': () => this._adaptAnthropic(composedLayers),
|
|
203
|
+
'gemini': () => this._adaptGemini(composedLayers),
|
|
204
|
+
'ollama': () => this._adaptOllama(composedLayers),
|
|
205
|
+
'mcp': () => this._adaptMCP(composedLayers),
|
|
206
|
+
'wordpress': () => this._adaptWordPress(composedLayers),
|
|
207
|
+
'slack': () => this._adaptSlack(composedLayers),
|
|
208
|
+
'system_prompt': () => this._adaptSystemPrompt(composedLayers),
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const adapter = adapters[platform] || adapters['system_prompt'];
|
|
212
|
+
return adapter();
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// ── Platform Adapters ───────────────────────────────────────────
|
|
216
|
+
|
|
217
|
+
_adaptSystemPrompt(layers) {
|
|
218
|
+
let prompt = '';
|
|
219
|
+
|
|
220
|
+
// K1: Brand Voice
|
|
221
|
+
if (layers.brand_voice?.tone) {
|
|
222
|
+
prompt += `## Communication Style\nTone: ${layers.brand_voice.tone}\n`;
|
|
223
|
+
if (layers.brand_voice.formality !== undefined) prompt += `Formality level: ${layers.brand_voice.formality}/1.0\n`;
|
|
224
|
+
if (layers.brand_voice.style_rules?.length) {
|
|
225
|
+
prompt += 'Rules:\n' + layers.brand_voice.style_rules.map(r => `- ${r}`).join('\n') + '\n';
|
|
226
|
+
}
|
|
227
|
+
if (layers.brand_voice.vocabulary_prohibitions?.length) {
|
|
228
|
+
prompt += `Never use: ${layers.brand_voice.vocabulary_prohibitions.join(', ')}\n`;
|
|
229
|
+
}
|
|
230
|
+
prompt += '\n';
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// K2: Terminology
|
|
234
|
+
if (layers.terminology?.acronyms && Object.keys(layers.terminology.acronyms).length) {
|
|
235
|
+
prompt += '## Terminology\n';
|
|
236
|
+
for (const [abbr, full] of Object.entries(layers.terminology.acronyms)) {
|
|
237
|
+
prompt += `- ${abbr} = ${full}\n`;
|
|
238
|
+
}
|
|
239
|
+
if (layers.terminology.proper_nouns) {
|
|
240
|
+
for (const [noun, rule] of Object.entries(layers.terminology.proper_nouns)) {
|
|
241
|
+
prompt += `- "${noun}": ${rule}\n`;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
prompt += '\n';
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// K3: Business Structure
|
|
248
|
+
if (layers.business_structure?.business_name) {
|
|
249
|
+
prompt += '## Business Information\n';
|
|
250
|
+
const bs = layers.business_structure;
|
|
251
|
+
if (bs.business_name) prompt += `Business: ${bs.business_name}\n`;
|
|
252
|
+
if (bs.phone) prompt += `Phone: ${bs.phone}\n`;
|
|
253
|
+
if (bs.email) prompt += `Email: ${bs.email}\n`;
|
|
254
|
+
if (bs.address) prompt += `Address: ${bs.address}\n`;
|
|
255
|
+
if (bs.hours) prompt += `Hours: ${JSON.stringify(bs.hours)}\n`;
|
|
256
|
+
if (bs.services?.length) {
|
|
257
|
+
prompt += '\nServices:\n';
|
|
258
|
+
for (const svc of bs.services) {
|
|
259
|
+
prompt += `- ${svc.name}${svc.price ? ` (${svc.price})` : ''}${svc.duration ? ` — ${svc.duration}` : ''}\n`;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
prompt += '\n';
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// K5: Domain Knowledge
|
|
266
|
+
if (layers.domain_knowledge?.faq_pairs?.length) {
|
|
267
|
+
prompt += '## FAQ\n';
|
|
268
|
+
for (const faq of layers.domain_knowledge.faq_pairs) {
|
|
269
|
+
prompt += `Q: ${faq.q}\nA: ${faq.a}\n\n`;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return { type: 'system_prompt', content: prompt.trim() };
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
_adaptOpenAI(layers) {
|
|
277
|
+
const systemPrompt = this._adaptSystemPrompt(layers);
|
|
278
|
+
// OpenAI GPTs have 128K context — we can include everything
|
|
279
|
+
return {
|
|
280
|
+
type: 'openai_gpt',
|
|
281
|
+
instructions: systemPrompt.content,
|
|
282
|
+
knowledge_files: this._extractKnowledgeFiles(layers),
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
_adaptAnthropic(layers) {
|
|
287
|
+
const systemPrompt = this._adaptSystemPrompt(layers);
|
|
288
|
+
return {
|
|
289
|
+
type: 'anthropic_project',
|
|
290
|
+
system: systemPrompt.content,
|
|
291
|
+
project_knowledge: this._extractKnowledgeFiles(layers),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
_adaptGemini(layers) {
|
|
296
|
+
const systemPrompt = this._adaptSystemPrompt(layers);
|
|
297
|
+
// Gemini Gems have 4K char limit — truncate by priority
|
|
298
|
+
const truncated = systemPrompt.content.substring(0, 4000);
|
|
299
|
+
return {
|
|
300
|
+
type: 'gemini_gem',
|
|
301
|
+
instructions: truncated,
|
|
302
|
+
truncated: systemPrompt.content.length > 4000,
|
|
303
|
+
original_length: systemPrompt.content.length,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
_adaptOllama(layers) {
|
|
308
|
+
const systemPrompt = this._adaptSystemPrompt(layers);
|
|
309
|
+
return {
|
|
310
|
+
type: 'ollama_brain',
|
|
311
|
+
system: systemPrompt.content,
|
|
312
|
+
brain_file: this._generateBrainFile(layers),
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
_adaptMCP(layers) {
|
|
317
|
+
const systemPrompt = this._adaptSystemPrompt(layers);
|
|
318
|
+
return {
|
|
319
|
+
type: 'mcp_context',
|
|
320
|
+
system_prefix: systemPrompt.content,
|
|
321
|
+
tool_context: layers.credentials || {},
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
_adaptWordPress(layers) {
|
|
326
|
+
const systemPrompt = this._adaptSystemPrompt(layers);
|
|
327
|
+
return {
|
|
328
|
+
type: 'wordpress_onpress',
|
|
329
|
+
chat_system_prompt: systemPrompt.content,
|
|
330
|
+
theme_colors: layers.visual_identity || {},
|
|
331
|
+
business_info: layers.business_structure || {},
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
_adaptSlack(layers) {
|
|
336
|
+
const systemPrompt = this._adaptSystemPrompt(layers);
|
|
337
|
+
return {
|
|
338
|
+
type: 'slack_bot',
|
|
339
|
+
bot_personality: systemPrompt.content,
|
|
340
|
+
slash_commands: this._generateSlashCommands(layers),
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
_extractKnowledgeFiles(layers) {
|
|
345
|
+
const files = [];
|
|
346
|
+
if (layers.domain_knowledge?.procedures?.length) {
|
|
347
|
+
files.push({ name: 'procedures.md', content: layers.domain_knowledge.procedures.join('\n\n---\n\n') });
|
|
348
|
+
}
|
|
349
|
+
if (layers.domain_knowledge?.faq_pairs?.length) {
|
|
350
|
+
const faqContent = layers.domain_knowledge.faq_pairs.map(f => `## ${f.q}\n\n${f.a}`).join('\n\n');
|
|
351
|
+
files.push({ name: 'faq.md', content: faqContent });
|
|
352
|
+
}
|
|
353
|
+
return files;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
_generateBrainFile(layers) {
|
|
357
|
+
return {
|
|
358
|
+
format: '0n-brain-v1',
|
|
359
|
+
layers: Object.fromEntries(
|
|
360
|
+
Object.entries(layers).filter(([k]) => k !== 'credentials')
|
|
361
|
+
),
|
|
362
|
+
generated_at: new Date().toISOString(),
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
_generateSlashCommands(layers) {
|
|
367
|
+
const commands = ['/0n help'];
|
|
368
|
+
if (layers.business_structure?.services?.length) commands.push('/0n services');
|
|
369
|
+
if (layers.business_structure?.hours) commands.push('/0n hours');
|
|
370
|
+
if (layers.credentials?.api_keys?.stripe) commands.push('/0n invoice');
|
|
371
|
+
return commands;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// ── Credential Harvester ────────────────────────────────────────────
|
|
376
|
+
|
|
377
|
+
class CredentialHarvester {
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Analyze a set of key-value pairs and identify credentials.
|
|
381
|
+
* Works with .env files, JSON configs, process.env, etc.
|
|
382
|
+
*/
|
|
383
|
+
static harvest(keyValuePairs) {
|
|
384
|
+
const discovered = [];
|
|
385
|
+
|
|
386
|
+
for (const [key, value] of Object.entries(keyValuePairs)) {
|
|
387
|
+
if (!value || typeof value !== 'string') continue;
|
|
388
|
+
|
|
389
|
+
for (const pattern of CREDENTIAL_PATTERNS) {
|
|
390
|
+
if (pattern.pattern.test(value)) {
|
|
391
|
+
discovered.push({
|
|
392
|
+
key,
|
|
393
|
+
service: pattern.service,
|
|
394
|
+
name: pattern.name,
|
|
395
|
+
value_preview: value.substring(0, 8) + '...',
|
|
396
|
+
// Actual value stored only in encrypted K6 layer
|
|
397
|
+
});
|
|
398
|
+
break;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
return discovered;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Verify a discovered credential by making a health-check API call.
|
|
408
|
+
*/
|
|
409
|
+
static async verify(service, value) {
|
|
410
|
+
const healthChecks = {
|
|
411
|
+
anthropic: () => fetch('https://api.anthropic.com/v1/messages', {
|
|
412
|
+
method: 'POST', headers: { 'x-api-key': value, 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json' },
|
|
413
|
+
body: JSON.stringify({ model: 'claude-haiku-4-5-20251001', max_tokens: 1, messages: [{ role: 'user', content: 'hi' }] }),
|
|
414
|
+
}),
|
|
415
|
+
openai: () => fetch('https://api.openai.com/v1/models', { headers: { Authorization: `Bearer ${value}` } }),
|
|
416
|
+
stripe: () => fetch('https://api.stripe.com/v1/balance', { headers: { Authorization: `Bearer ${value}` } }),
|
|
417
|
+
groq: () => fetch('https://api.groq.com/openai/v1/models', { headers: { Authorization: `Bearer ${value}` } }),
|
|
418
|
+
github: () => fetch('https://api.github.com/user', { headers: { Authorization: `Bearer ${value}` } }),
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
const check = healthChecks[service];
|
|
422
|
+
if (!check) return { verified: false, reason: 'No health check available' };
|
|
423
|
+
|
|
424
|
+
try {
|
|
425
|
+
const res = await check();
|
|
426
|
+
return { verified: res.status < 400, status: res.status };
|
|
427
|
+
} catch (err) {
|
|
428
|
+
return { verified: false, reason: err.message };
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// ── Exports ─────────────────────────────────────────────────────────
|
|
434
|
+
|
|
435
|
+
module.exports = {
|
|
436
|
+
LAYER_SCHEMA,
|
|
437
|
+
CREDENTIAL_PATTERNS,
|
|
438
|
+
KnowledgeLayers,
|
|
439
|
+
CredentialHarvester,
|
|
440
|
+
};
|
package/lib/stats.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "0nmcp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"mcpName": "io.github.0nork/0nMCP",
|
|
5
5
|
"description": "Universal AI API Orchestrator — 819 tools, 48 services, portable AI Brain bundles + machine-bound vault encryption + Application Engine. The most comprehensive MCP server available. Free and open source from 0nORK.",
|
|
6
6
|
"type": "module",
|
|
@@ -205,6 +205,6 @@
|
|
|
205
205
|
"triggers": 155,
|
|
206
206
|
"totalCapabilities": 1078,
|
|
207
207
|
"categories": 21,
|
|
208
|
-
"lastUpdated": "2026-
|
|
208
|
+
"lastUpdated": "2026-04-03T09:50:10.449Z"
|
|
209
209
|
}
|
|
210
210
|
}
|