@elastic.io/mcp 1.0.0 → 1.0.1-beta
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 +128 -126
- package/README.npm.md +173 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +8 -3
- package/dist/api/client.js.map +1 -1
- package/dist/api/jsonapi.d.ts +2 -9
- package/dist/api/jsonapi.d.ts.map +1 -1
- package/dist/api/jsonapi.js +1 -14
- package/dist/api/jsonapi.js.map +1 -1
- package/dist/api/logger.d.ts +0 -1
- package/dist/api/logger.d.ts.map +1 -1
- package/dist/api/logger.js +2 -5
- package/dist/api/logger.js.map +1 -1
- package/dist/api/samples.d.ts +0 -6
- package/dist/api/samples.d.ts.map +1 -1
- package/dist/api/samples.js +8 -8
- package/dist/api/samples.js.map +1 -1
- package/dist/api/verification.d.ts +6 -0
- package/dist/api/verification.d.ts.map +1 -0
- package/dist/api/verification.js +71 -0
- package/dist/api/verification.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +9 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -5
- package/dist/config.js.map +1 -1
- package/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +0 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +1 -1
- package/dist/paths.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +24 -0
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts +3 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +338 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/confirmation.d.ts +0 -4
- package/dist/tools/confirmation.d.ts.map +1 -1
- package/dist/tools/confirmation.js +1 -1
- package/dist/tools/confirmation.js.map +1 -1
- package/dist/tools/constants.d.ts +6 -9
- package/dist/tools/constants.d.ts.map +1 -1
- package/dist/tools/constants.js +48 -41
- package/dist/tools/constants.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +37 -5
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/flow-build.d.ts +18 -0
- package/dist/tools/flow-build.d.ts.map +1 -0
- package/dist/tools/flow-build.js +295 -0
- package/dist/tools/flow-build.js.map +1 -0
- package/dist/tools/flow-evidence.d.ts +62 -0
- package/dist/tools/flow-evidence.d.ts.map +1 -0
- package/dist/tools/flow-evidence.js +128 -0
- package/dist/tools/flow-evidence.js.map +1 -0
- package/dist/tools/flow-state-machine.d.ts +69 -0
- package/dist/tools/flow-state-machine.d.ts.map +1 -0
- package/dist/tools/flow-state-machine.js +292 -0
- package/dist/tools/flow-state-machine.js.map +1 -0
- package/dist/tools/handlers/auth.d.ts.map +1 -1
- package/dist/tools/handlers/auth.js +18 -148
- package/dist/tools/handlers/auth.js.map +1 -1
- package/dist/tools/handlers/component.d.ts.map +1 -1
- package/dist/tools/handlers/component.js +28 -8
- package/dist/tools/handlers/component.js.map +1 -1
- package/dist/tools/handlers/data-sample.d.ts.map +1 -1
- package/dist/tools/handlers/data-sample.js +37 -5
- package/dist/tools/handlers/data-sample.js.map +1 -1
- package/dist/tools/handlers/dynamic.d.ts.map +1 -1
- package/dist/tools/handlers/dynamic.js +43 -14
- package/dist/tools/handlers/dynamic.js.map +1 -1
- package/dist/tools/handlers/flow.d.ts.map +1 -1
- package/dist/tools/handlers/flow.js +147 -619
- package/dist/tools/handlers/flow.js.map +1 -1
- package/dist/tools/handlers/log.d.ts.map +1 -1
- package/dist/tools/handlers/log.js +31 -0
- package/dist/tools/handlers/log.js.map +1 -1
- package/dist/tools/handlers/raw.d.ts.map +1 -1
- package/dist/tools/handlers/raw.js +5 -2
- package/dist/tools/handlers/raw.js.map +1 -1
- package/dist/tools/handlers/search.d.ts.map +1 -1
- package/dist/tools/handlers/search.js +67 -44
- package/dist/tools/handlers/search.js.map +1 -1
- package/dist/tools/handlers/session.d.ts.map +1 -1
- package/dist/tools/handlers/session.js +8 -1
- package/dist/tools/handlers/session.js.map +1 -1
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +7 -2
- package/dist/tools/handlers.js.map +1 -1
- package/dist/tools/helpers.d.ts +0 -1
- package/dist/tools/helpers.d.ts.map +1 -1
- package/dist/tools/helpers.js +2 -2
- package/dist/tools/helpers.js.map +1 -1
- package/dist/tools/types.d.ts +8 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/validation.d.ts +16 -5
- package/dist/tools/validation.d.ts.map +1 -1
- package/dist/tools/validation.js +220 -168
- package/dist/tools/validation.js.map +1 -1
- package/dist/vectorstore/qdrant.js +1 -1
- package/dist/vectorstore/qdrant.js.map +1 -1
- package/package.json +22 -7
- package/resources/docs/flow-building-guide.md +18 -2
- package/resources/docs/rest-api-pagination.md +58 -0
- package/resources/docs/system-instructions.md +35 -5
- package/resources/docs/component-test-scenarios.md +0 -2468
- package/resources/docs/credential-validation-gaps.md +0 -35
- package/resources/docs/debug-issues.md +0 -71
- package/resources/docs/deployment-and-scaling.md +0 -136
- package/resources/docs/packaging-plan.md +0 -84
- package/resources/docs/unique-components.md +0 -60
- package/resources/docs/verified-creds-flow-ids.md +0 -193
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# Credential Validation Gaps
|
|
2
|
-
|
|
3
|
-
## Problem
|
|
4
|
-
When building or updating a flow, the MCP server does not validate whether credentials/secrets are actually functional before allowing them to be used. This leads to flows being created with broken credentials that fail at runtime.
|
|
5
|
-
|
|
6
|
-
## Discovered on flow `6aaa5f922fbba1001240ee87`
|
|
7
|
-
- Step 7: Azure Data Lake Storage (`makeRawRequest`)
|
|
8
|
-
- Secret used: `68655543cb48720012860817` ("My New Azure Data Lake Storage component Credential") — state `ready` but account `sparrow1test` does not exist (DNS failure)
|
|
9
|
-
- Second secret: `6842d77f5758c500127a90b1` ("QA") — state `error`, OAuth refresh_token expired since July 2025
|
|
10
|
-
|
|
11
|
-
## Fix applied (partial)
|
|
12
|
-
Changed `discoveryState.secrets` from `Set<string>` to `Map<string, string>` (id → state) so that `checkDiscoveryState()` can reject secrets in `error` state **before** submitting to the API.
|
|
13
|
-
|
|
14
|
-
### Files changed
|
|
15
|
-
- `src/tools/types.ts` — `secrets` type changed to `Map<string, string>`
|
|
16
|
-
- `src/tools/handlers.ts` — initialization updated
|
|
17
|
-
- `src/tools/handlers/auth.ts` — `list_secrets` now stores state
|
|
18
|
-
- `src/tools/validation.ts` — `checkDiscoveryState()` rejects non-ready secrets
|
|
19
|
-
- `src/tools/__tests__/handlers.test.ts` — updated to use Map
|
|
20
|
-
|
|
21
|
-
## Additional fix: verification tracking and pre-submission blocking
|
|
22
|
-
|
|
23
|
-
Added `credentialVerifications: Map<string, { ok: boolean; error?: string }>` to `DiscoveryState`.
|
|
24
|
-
|
|
25
|
-
### Changes
|
|
26
|
-
- `src/tools/types.ts` — added `credentialVerifications` field
|
|
27
|
-
- `src/tools/handlers.ts` — initialization updated
|
|
28
|
-
- `src/tools/handlers/auth.ts` — `init_verify_credentials` now polls verification result internally and stores it in `discoveryState.credentialVerifications`. Returns final result instead of pending executionId.
|
|
29
|
-
- `src/tools/validation.ts` — `checkDiscoveryState()` checks verification results for all nodes and blocks credentials/secrets that failed verification
|
|
30
|
-
- `src/tools/__tests__/handlers.test.ts` — 6 new tests + 4 updated existing tests
|
|
31
|
-
|
|
32
|
-
### What this covers
|
|
33
|
-
1. **Secret in `ready` state but actually broken** — caught if `init_verify_credentials` was called (verification result stored and checked pre-submission)
|
|
34
|
-
2. **Plain credentials** — same mechanism via `credentialVerifications` Map
|
|
35
|
-
3. **Test coverage** — secret state check + verification result check for both secrets and plain credentials
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# Debug Issues — Component Testing
|
|
2
|
-
|
|
3
|
-
Issues discovered during debug_flow_step testing on flow `6aad4e79acd7d1001240041f`.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Apptivo — Invalid API endpoint
|
|
8
|
-
|
|
9
|
-
- **Component**: `PS_component_testing/apptivo-component` (`689b49481890650012d6e5b9`)
|
|
10
|
-
- **Action**: `makeRawRequest`
|
|
11
|
-
- **Credential**: `QA_test` (`689b54ef1890650012d72e17`) — verifies OK
|
|
12
|
-
- **Problem**: All `makeRawRequest` calls return `500 Internal Server Error` with `{"status_code":"1503","status_reason":"Invalid API end point","status":"failure"}`
|
|
13
|
-
- **Tried URLs**:
|
|
14
|
-
- `/contacts?a=getAllContacts&countPerPage=1`
|
|
15
|
-
- `/contacts?a=getContactById&contactId=1`
|
|
16
|
-
- `contacts?a=getAllContacts&countPerPage=1` (without leading slash)
|
|
17
|
-
- **Base URL**: Component docs say base is `https://app.apptivo.com/app/dao/v6`, so the raw request URL should be relative to that. None of the tried paths worked.
|
|
18
|
-
- **Status**: Unresolved. Needs investigation of correct Apptivo API v6 URL format.
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Square — URL requires no `/v2` prefix
|
|
23
|
-
|
|
24
|
-
- **Component**: `PS_component_testing/square-component` (`667be8681ed49100120a1197`)
|
|
25
|
-
- **Action**: `makeRawRequest`
|
|
26
|
-
- **Credential**: `QA` (`68babd3faa954a00120aabbf`) — verifies OK
|
|
27
|
-
- **Problem**: `/v2/locations` returns 404 (`INVALID_REQUEST_ERROR / NOT_FOUND`), but `/locations` works fine (200 with location data).
|
|
28
|
-
- **Root cause**: The component's base URL already includes `/v2`, so raw request paths should NOT include the `/v2` prefix. This is not obvious from the component descriptor.
|
|
29
|
-
- **Status**: Resolved. Use paths without `/v2` prefix (e.g. `/locations` instead of `/v2/locations`).
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## Phantom data sample / dynamic_metadata deletion
|
|
34
|
-
|
|
35
|
-
- **Flow**: `6aad4e79acd7d1001240041f`
|
|
36
|
-
- **Problem**: After building 18 steps with debug samples, UI showed "Failed to load the samples" for all steps. Investigation found 4 missing resources (404):
|
|
37
|
-
- `6ab260c7adc8720012aacb24` — `dynamic_metadata` on step_8 (AWS S3)
|
|
38
|
-
- `6ab2771aab80c900126621e0` — `dynamic_metadata` on step_13 (Gemini)
|
|
39
|
-
- `6ab2771badc8720012adf2dc` — `dynamic_metadata` on step_14 (Grok)
|
|
40
|
-
- `6ab28333ab80c9001267dd0a` — `selected_data_samples` on step_18 (Stripe)
|
|
41
|
-
- **UI behavior**: `src/frontend/src/modules/store/actions/data-samples.js:70-75` uses `Promise.all` to load all samples; if any returns 404, the entire load fails with "Failed to load the samples".
|
|
42
|
-
- **What dynamic_metadata actually is**: Stored in MongoDB collection `DynamicMetadata` (`src/commons/lib/models/dynamic_metadata.js`), NOT in `DataSample`. Created by `/v2/components/{id}/versions/{ver}/dynamic-metadata`. The `dynamic_metadata` field on a node references a DynamicMetadata record, not a data sample — so a 404 on these should NOT cause data sample loading to fail (unless the UI tries to load them as data samples).
|
|
43
|
-
- **No TTL/GC exists**: Neither `DataSample` nor `DynamicMetadata` models have `expireAfterSeconds` indexes. Wiper does not clean them. Both are only deleted on workspace deletion or recipe re-export.
|
|
44
|
-
- **Root cause**: Unknown. The records disappeared without any known cleanup mechanism. Possible causes:
|
|
45
|
-
- Manual deletion via API or DB
|
|
46
|
-
- Debug process resetting the draft and orphaning/deleting associated records
|
|
47
|
-
- Race condition during concurrent draft modifications (UI + API)
|
|
48
|
-
- **Fix applied**: Removed broken `dynamic_metadata` references from step_8/13/14, re-debugged Stripe to create new data sample `6ab2851cadc8720012b015e0`.
|
|
49
|
-
- **Status**: Fixed but root cause unknown. Needs investigation of what deletes data samples and dynamic metadata records outside of workspace deletion.
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## SAP Business One — Debug timeout (30s)
|
|
54
|
-
|
|
55
|
-
- **Component**: `PS_component_testing/sap-business-one-component` (`676e7cb9d6b1100012f5e9be`)
|
|
56
|
-
- **Action**: `makeRawRequest`
|
|
57
|
-
- **Credential**: (`676ea7e5d6b1100012f6d05b`)
|
|
58
|
-
- **Input**: `{"method": "GET", "url": "BusinessPartners?$top=1"}`
|
|
59
|
-
- **Problem**: `debug_flow_step` times out after 30s. On-premise SAP system too slow to respond within the debug timeout window.
|
|
60
|
-
- **Status**: Unresolved. Synthetic data sample used instead. Live retrieval not possible with current 30s timeout.
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## MS Dynamics CRM V2 — DNS resolution failure
|
|
65
|
-
|
|
66
|
-
- **Component**: `PS_component_testing/microsoft-dynamics-crm-v2` (`64592579991bbb00128be3e4`)
|
|
67
|
-
- **Action**: `makeRawRequest`
|
|
68
|
-
- **Secret**: (`686fc9f14109aa0012d32f07`)
|
|
69
|
-
- **Input**: `{"method": "GET", "url": "accounts?$top=1"}`
|
|
70
|
-
- **Problem**: `500 Internal Server Error` — `getaddrinfo ENOTFOUND org15005212.crm4.dynamics.com`. The Dynamics CRM instance hostname cannot be resolved (instance may be decommissioned or offline).
|
|
71
|
-
- **Status**: Unresolved. Synthetic data sample used instead. Credential/instance needs verification.
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
# Deployment and Scaling Guide (SSE Mode)
|
|
2
|
-
|
|
3
|
-
This guide documents the architecture, horizontal scaling requirements, and security controls for deploying the elastic.io MCP server in multi-tenant cloud environments.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 1. The Stateful Nature of SSE Mode
|
|
8
|
-
|
|
9
|
-
When running in Server-Sent Events (SSE) mode, the server operates on a hybrid architecture:
|
|
10
|
-
1. **Persistent SSE Stream (GET /sse)**: Keeps an open, persistent HTTP response channel to push events from the server to the client.
|
|
11
|
-
2. **Client-to-Server Messages (POST /sse or POST /messages)**: Short-lived HTTP requests sent by the client to invoke tools or send notifications.
|
|
12
|
-
|
|
13
|
-
Under the hood, each user session creates a live Node.js `McpServer` object and an active REST client tied to the user's platform credentials. **This connection state and session memory exist solely in the RAM of the specific Node.js process/container that initialized it.**
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## 2. Horizontal Scaling & Clustering (Sticky Sessions)
|
|
18
|
-
|
|
19
|
-
Because the session manager is in-memory, horizontal scaling across multiple container instances (e.g. behind AWS ALB, Kubernetes NGINX Ingress, or GCP Cloud Load Balancing) requires **Sticky Sessions (Session Affinity)**.
|
|
20
|
-
|
|
21
|
-
Without Sticky Sessions:
|
|
22
|
-
* **The Issue**: A client connects to `GET /sse` and routes to *Instance A* (creating the session in memory). The client's subsequent tool call `POST /messages` gets routed by the load balancer to *Instance B*. *Instance B* does not have this session ID in its memory, returning a `404 Session not found` error.
|
|
23
|
-
* **The Solution**: The load balancer must bind a client's session to the same backend container instance for the duration of the session.
|
|
24
|
-
|
|
25
|
-
### Load Balancer Configuration Patterns
|
|
26
|
-
|
|
27
|
-
Below are configuration patterns for major cloud providers:
|
|
28
|
-
|
|
29
|
-
#### A. AWS Application Load Balancer (ALB)
|
|
30
|
-
Configure **Duration-Based Stickiness** or **Application-Controlled Stickiness** on your Target Group:
|
|
31
|
-
* **Stickiness Type**: `lb_cookie` (Load Balancer Generated Cookie)
|
|
32
|
-
* **Cookie Duration**: Match your session idle timeout (e.g., `1800 seconds` / 30 minutes).
|
|
33
|
-
* **Terraform Example**:
|
|
34
|
-
```hcl
|
|
35
|
-
resource "aws_lb_target_group" "mcp_server" {
|
|
36
|
-
name = "mcp-server-tg"
|
|
37
|
-
port = 3000
|
|
38
|
-
protocol = "HTTP"
|
|
39
|
-
vpc_id = var.vpc_id
|
|
40
|
-
|
|
41
|
-
stickiness {
|
|
42
|
-
type = "lb_cookie"
|
|
43
|
-
cookie_duration = 1800
|
|
44
|
-
enabled = true
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
#### B. Kubernetes NGINX Ingress Controller
|
|
50
|
-
Add the session affinity annotations to your Ingress resource. NGINX will automatically inject a cookie (default: `INGRESSCOOKIE`) to route subsequent requests:
|
|
51
|
-
* **Ingress YAML Example**:
|
|
52
|
-
```yaml
|
|
53
|
-
apiVersion: networking.k8s.io/v1
|
|
54
|
-
kind: Ingress
|
|
55
|
-
metadata:
|
|
56
|
-
name: mcp-server-ingress
|
|
57
|
-
annotations:
|
|
58
|
-
nginx.ingress.kubernetes.io/affinity: "cookie"
|
|
59
|
-
nginx.ingress.kubernetes.io/session-cookie-name: "route"
|
|
60
|
-
nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
|
|
61
|
-
nginx.ingress.kubernetes.io/session-cookie-expires: "1800"
|
|
62
|
-
nginx.ingress.kubernetes.io/session-cookie-max-age: "1800"
|
|
63
|
-
spec:
|
|
64
|
-
rules:
|
|
65
|
-
- host: mcp.yourdomain.com
|
|
66
|
-
http:
|
|
67
|
-
paths:
|
|
68
|
-
- path: /
|
|
69
|
-
pathType: Prefix
|
|
70
|
-
backend:
|
|
71
|
-
service:
|
|
72
|
-
name: mcp-server-service
|
|
73
|
-
port:
|
|
74
|
-
number: 3000
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
#### C. Google Cloud Platform (GCP) HTTP(S) Load Balancing
|
|
78
|
-
Set the backend service's session affinity to `GENERATED_COOKIE`:
|
|
79
|
-
* **gcloud Command**:
|
|
80
|
-
```bash
|
|
81
|
-
gcloud compute backend-services update mcp-server-backend-service \
|
|
82
|
-
--session-affinity=GENERATED_COOKIE \
|
|
83
|
-
--affinity-cookie-ttl=1800 \
|
|
84
|
-
--global
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## 3. Production Resource & Rate Limit Considerations
|
|
90
|
-
|
|
91
|
-
### Redis-Backed Rate Limiting
|
|
92
|
-
The default rate limiter (`sseRateLimiter` in `src/index.ts`) records IP connections in an in-memory Map.
|
|
93
|
-
* **Limitation**: In a cluster, each container rate-limits independently. An attacker could bypass rate limits by hitting different containers.
|
|
94
|
-
* **Production Fix**: Replace the custom rate limiter with `express-rate-limit` using the `rate-limit-redis` store:
|
|
95
|
-
```typescript
|
|
96
|
-
import rateLimit from 'express-rate-limit';
|
|
97
|
-
import RedisStore from 'rate-limit-redis';
|
|
98
|
-
import Redis from 'ioredis';
|
|
99
|
-
|
|
100
|
-
const redisClient = new Redis(config.redisUrl);
|
|
101
|
-
|
|
102
|
-
const limiter = rateLimit({
|
|
103
|
-
windowMs: 60 * 1000, // 1 minute
|
|
104
|
-
max: 10, // Limit each IP to 10 connections per window
|
|
105
|
-
standardHeaders: true,
|
|
106
|
-
legacyHeaders: false,
|
|
107
|
-
store: new RedisStore({
|
|
108
|
-
sendCommand: (...args: string[]) => redisClient.call(args[0], ...args.slice(1)),
|
|
109
|
-
}),
|
|
110
|
-
});
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## 4. Architectural Alternatives: Transitioning to Mature Solutions
|
|
116
|
-
|
|
117
|
-
The custom Node.js Express/SSE wrapper (`SessionManager`) acts as an in-memory multiplexer, which introduces maintenance overhead (writing custom reapers, session state checks, and sticky load balancer affinity).
|
|
118
|
-
|
|
119
|
-
For enterprise production setups, you are highly encouraged to move the session, transport, and process management out of the application codebase using one of two mature alternatives:
|
|
120
|
-
|
|
121
|
-
### Alternative A: Third-Party MCP Gateway (Protocol Bridging)
|
|
122
|
-
Deploy this repository strictly as a stateless `stdio` (stdin/stdout) service (which is already implemented in the code), and wrap it using a production-ready, off-the-shelf gateway:
|
|
123
|
-
* **ContextForge Gateway**: An open-source gateway designed to act as a centralized, multi-tenant proxy that handles credentials, logging, and exposes a unified SSE/REST interface.
|
|
124
|
-
* **Supergateway**: A lightweight CLI/Docker wrapper that exposes any `stdio` server over SSE with zero custom code:
|
|
125
|
-
```bash
|
|
126
|
-
supergateway --port 3000 --stdio "node dist/index.js"
|
|
127
|
-
```
|
|
128
|
-
* **Apache APISIX (`mcp-bridge` plugin)**: Bridges standard stdio processes and scales them dynamically as SSE streams, managing routing, rate-limiting, and credentials centrally.
|
|
129
|
-
|
|
130
|
-
### Alternative B: Infrastructure-Level Multi-Tenancy (Micro-Containers)
|
|
131
|
-
Achieve strict security and process-level isolation by delegating execution lifecycles to cloud infrastructure:
|
|
132
|
-
1. **Stateless Stdio Container**: Package the MCP server strictly in `stdio` mode inside a Docker image.
|
|
133
|
-
2. **On-Demand Orchestration**: Spin up isolated, single-tenant container instances (or micro-VMs) on-demand for active users (using AWS ECS, GCP Cloud Run, or Fly.io).
|
|
134
|
-
3. **Gateway Routing**: An API Gateway authenticates the user, spins up their dedicated container task, and proxies the connection.
|
|
135
|
-
4. **Benefits**: Wipes out custom session reapers, memory leak risks, and session state serialization logic from the application repository.
|
|
136
|
-
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# MCP Server — Packaging Plan
|
|
2
|
-
|
|
3
|
-
Plan for publishing `elasticio-mcp-server` as a standalone npm package.
|
|
4
|
-
|
|
5
|
-
## Current State
|
|
6
|
-
|
|
7
|
-
- TypeScript with `outDir: ./dist`, ESM (`"type": "module"`)
|
|
8
|
-
- `"main": "dist/index.js"` already set
|
|
9
|
-
- Two transport modes: stdio (CLI) and SSE (HTTP server)
|
|
10
|
-
- `"private": true` — blocks npm publish
|
|
11
|
-
- Qdrant + Google GenAI are required dependencies (crash on startup without credentials)
|
|
12
|
-
|
|
13
|
-
## Changes Required
|
|
14
|
-
|
|
15
|
-
### 1. `package.json`
|
|
16
|
-
|
|
17
|
-
- Remove `"private": true`
|
|
18
|
-
- Add `bin` entry:
|
|
19
|
-
```json
|
|
20
|
-
"bin": {
|
|
21
|
-
"elasticio-mcp": "./dist/index.js"
|
|
22
|
-
}
|
|
23
|
-
```
|
|
24
|
-
- Add `files` to control what gets published:
|
|
25
|
-
```json
|
|
26
|
-
"files": ["dist", "resources"]
|
|
27
|
-
```
|
|
28
|
-
- Exclude `.env`, `settings.json`, test files, scripts from the package
|
|
29
|
-
|
|
30
|
-
### 2. Shebang
|
|
31
|
-
|
|
32
|
-
Add `#!/usr/bin/env node` to the top of `src/index.ts` so the CLI entry point works when installed globally.
|
|
33
|
-
|
|
34
|
-
### 3. Make Vector Search Optional
|
|
35
|
-
|
|
36
|
-
Qdrant and embedding dependencies are only used by 3 tools:
|
|
37
|
-
- `search_documentation`
|
|
38
|
-
- `search_flow_samples`
|
|
39
|
-
- `search_flow_steps`
|
|
40
|
-
|
|
41
|
-
The remaining ~20 tools (CRUD for flows, components, credentials, etc.) work purely via the elastic.io REST API.
|
|
42
|
-
|
|
43
|
-
**Approach**: If `VECTOR_STORE_URL` is not set, skip registration of search tools or return a "Vector search not configured" message. Do not crash on startup.
|
|
44
|
-
|
|
45
|
-
### 4. Share Qdrant as Read-Only (Default Search)
|
|
46
|
-
|
|
47
|
-
Create a **read-only API key** in Qdrant Cloud and hardcode it as the default `VECTOR_STORE_URL` / `VECTOR_STORE_API_KEY`. This way users get search over the pre-indexed flow examples and documentation out of the box.
|
|
48
|
-
|
|
49
|
-
Qdrant Cloud supports granular API keys — grant only `search` permission, no `write`.
|
|
50
|
-
|
|
51
|
-
**Behavior**:
|
|
52
|
-
- No env vars set → uses built-in read-only Qdrant endpoint (search works out of the box)
|
|
53
|
-
- User provides own `VECTOR_STORE_URL` → connects to their instance instead
|
|
54
|
-
- `EMBEDDING_PROVIDER_API_KEY` still required for embeddings (Google GenAI) — make this optional too, or document that users need their own key
|
|
55
|
-
|
|
56
|
-
### 5. Make `validateConfigOnStartup()` Graceful
|
|
57
|
-
|
|
58
|
-
Currently crashes if `EMBEDDING_PROVIDER_API_KEY` or `VECTOR_STORE_URL` are missing. For the packaged version:
|
|
59
|
-
- Only require `ELASTICIO_API_EMAIL` + `ELASTICIO_API_KEY` for stdio mode
|
|
60
|
-
- All other config should be optional with sensible defaults or disabled features
|
|
61
|
-
|
|
62
|
-
### 6. Handle Missing `resources/` Gracefully
|
|
63
|
-
|
|
64
|
-
`resources/elasticio.github.io/content` (used by `view_documentation` and `ingest_docs.ts`) may not exist in all installations. Add existence checks to avoid crashes.
|
|
65
|
-
|
|
66
|
-
### 7. Potential Dependency Optimization
|
|
67
|
-
|
|
68
|
-
`@google/genai` and `@qdrant/js-client-rest` are heavy dependencies that are only needed for vector search. Consider:
|
|
69
|
-
- Moving them to `optionalDependencies` or `peerDependencies`
|
|
70
|
-
- Lazy-loading them only when search tools are invoked
|
|
71
|
-
|
|
72
|
-
## Publish Checklist
|
|
73
|
-
|
|
74
|
-
- [ ] Remove `"private": true`
|
|
75
|
-
- [ ] Add `bin`, `files` fields
|
|
76
|
-
- [ ] Add shebang to entry point
|
|
77
|
-
- [ ] Make Qdrant/embeddings optional
|
|
78
|
-
- [ ] Create read-only Qdrant API key and set as default
|
|
79
|
-
- [ ] Graceful startup without vector store credentials
|
|
80
|
-
- [ ] Graceful handling of missing `resources/elasticio.github.io/`
|
|
81
|
-
- [ ] Add `.npmignore` or verify `files` field excludes dev artifacts
|
|
82
|
-
- [ ] Test `npm pack` and inspect tarball contents
|
|
83
|
-
- [ ] Test `npx elasticio-mcp` works end-to-end
|
|
84
|
-
- [ ] Choose package scope: `elasticio-mcp-server` or `@elasticio/mcp-server`
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# Unique Components from Verified Credentials Tests
|
|
2
|
-
|
|
3
|
-
Workspace: `59d341e9037f7200184a408b`
|
|
4
|
-
|
|
5
|
-
| # | Component | Example Scenario | Flow ID |
|
|
6
|
-
|---|---|---|---|
|
|
7
|
-
| 1 | REST API V2 | VC-A4: No Auth POST | `6a9ac39ea6268100125ee352` |
|
|
8
|
-
| 2 | PostgreSQL | VC-B1: SELECT | `6a9ac415a6268100125ef145` |
|
|
9
|
-
| 3 | MSSQL | VC-B5: SELECT | `6a9ac449a6268100125ef5bd` |
|
|
10
|
-
| 4 | MongoDB | VC-B8: Lookup by ID | `6a9ac699a6268100125f2260` |
|
|
11
|
-
| 5 | JDBC | VC-B12: MySQL Query | `6a9ac6e8a6268100125f29c7` |
|
|
12
|
-
| 7 | SFTP | VC-D1: Poll New Files | `6a9ac4df03c95f0012cf9fba` |
|
|
13
|
-
| 11 | ChatGPT | VC-E1: Text Generation | `6a9ac51f03c95f0012cfa355` |
|
|
14
|
-
| 12 | Claude AI | VC-E4: Text Generation | `6a9ad08a03c95f0012d0ac56` |
|
|
15
|
-
| 13 | Gemini | VC-E6: Text Generation | `6a9ad0e303c95f0012d0b2f3` |
|
|
16
|
-
| 14 | Grok | VC-E8: Text Generation | `6a9ad10b03c95f0012d0b5b0` |
|
|
17
|
-
| 15 | HubSpot | VC-F1: Poll Contacts | `6a9ad12ba6268100126020dd` |
|
|
18
|
-
| 16 | Zoho CRM | VC-F4: Poll Leads | `6a9ad179a62681001260263e` |
|
|
19
|
-
| 20 | Apptivo | VC-F12: Raw Request Contacts | `6a9ad6d403c95f0012d10cef` |
|
|
20
|
-
| 21 | Square | VC-F13: Poll Payments | `6a9ad77403c95f0012d1196e` |
|
|
21
|
-
| 22 | Stripe | VC-F15: Lookup Charges | `6a9ad795a62681001260884a` |
|
|
22
|
-
| 23 | Klaviyo | VC-F17: Poll Profiles | `6a9ad85a03c95f0012d1286c` |
|
|
23
|
-
| 24 | MailChimp | VC-F19: Subscribe Contact | `6a9ad88c03c95f0012d12c0e` |
|
|
24
|
-
| 25 | Marketo | VC-F21: Poll Leads | `6a9ad89403c95f0012d12cdc` |
|
|
25
|
-
| 26 | Magento 2 | VC-G1: Poll Orders | `6a9ad8f903c95f0012d13401` |
|
|
26
|
-
| 27 | Shopify Admin V1 | VC-G5: Poll Products | `6a9ad93ea62681001260a50a` |
|
|
27
|
-
| 28 | Shopify Admin V2 | VC-G6: Poll Orders | `6a9ad942a62681001260a57c` |
|
|
28
|
-
| 29 | VTEX | VC-G9: Poll Customers | `6a9ad966a62681001260a90d` |
|
|
29
|
-
| 30 | Amazon SP | VC-G12: Poll Orders | `6a9ad971a62681001260aa9f` |
|
|
30
|
-
| 31 | SAP Business One | VC-H5: Poll Partners | `6a9ad9fc03c95f0012d146d4` |
|
|
31
|
-
| 32 | SAP ByDesign | VC-H6: Poll Orders | `6a9ada0003c95f0012d14784` |
|
|
32
|
-
| 33 | MS Dynamics CRM V2 | VC-H7: Poll Accounts | `6a9ada0fa62681001260b4a3` |
|
|
33
|
-
| 34 | MS Dynamics BC OnPrem | VC-H10: Poll Items | `6a9ada4f03c95f0012d14c69` |
|
|
34
|
-
| 35 | Custom MS Dynamics BC | VC-H11: Poll Records | `6a9ada6703c95f0012d14d2d` |
|
|
35
|
-
| 36 | AFAS | VC-H12: Poll Records | `6a9ada6ca62681001260bdb1` |
|
|
36
|
-
| 37 | Tableau Cloud | VC-H16: Poll Objects | `6a9ada7703c95f0012d14fc3` |
|
|
37
|
-
| 38 | Slack | VC-I1: Send Message | `6a9adad503c95f0012d15767` |
|
|
38
|
-
| 41 | Email (SMTP) | VC-I6: Send via SMTP | `6a9adae0a62681001260c5bf` |
|
|
39
|
-
| 42 | ClickSend SMS | VC-I8: Send | `6a9adae2a62681001260c631` |
|
|
40
|
-
| 43 | Google Sheets V2 | VC-J1: Read Rows | `6a9adc95a62681001260dca3` |
|
|
41
|
-
| 44 | Gmail | VC-J4: Poll New Emails | `6a9adcf1a62681001260e5b8` |
|
|
42
|
-
| 45 | Google Analytics | VC-J6: Run Report | `6a9add1503c95f0012d17ece` |
|
|
43
|
-
| 47 | Google Pub/Sub | VC-J10: Publish Message | `6a9add47a62681001260ec1b` |
|
|
44
|
-
| 48 | Outlook | VC-K1: Poll New Emails | `6a9add7ca62681001260f010` |
|
|
45
|
-
| 49 | Monday | VC-K3: Webhook New Items | `6a9addb803c95f0012d18b9f` |
|
|
46
|
-
| 50 | AMQP | VC-L1: Publish Message | `6a9adde1a62681001260f745` |
|
|
47
|
-
| 51 | AWS SQS | VC-L4: Send Message | `6a9ade05a62681001260fa6e` |
|
|
48
|
-
| 52 | iLovePDF | VC-M1: Merge PDFs | `6a9ade26a62681001260fc98` |
|
|
49
|
-
| 53 | Picsart | VC-M3: Remove Background | `6a9ade4c03c95f0012d198e0` |
|
|
50
|
-
| 54 | Bynder | VC-M4: Poll Assets | `6a9adeb3a6268100126106ae` |
|
|
51
|
-
| 55 | PandaDoc | VC-M6: Poll Documents | `6a9adee703c95f0012d1a26b` |
|
|
52
|
-
| 56 | WordPress | VC-M8: Poll Posts | `6a9adefd03c95f0012d1a548` |
|
|
53
|
-
| 57 | Twitter | VC-N1: Post Tweet | `6a9adf36a626810012610c58` |
|
|
54
|
-
| 58 | Pinterest | VC-N2: Create Pin (Sandbox) | `6a9adf64a626810012610e8b` |
|
|
55
|
-
| 59 | Kit | VC-N3: Poll Subscribers | `6a9adf7ea6268100126110ff` |
|
|
56
|
-
| 60 | DeepL | VC-O3: Translate Text | `6a9adffc03c95f0012d1bbce` |
|
|
57
|
-
| 61 | SmartyStreets | VC-O5: Validate Address | `6a9ae02403c95f0012d1be2a` |
|
|
58
|
-
| 62 | SOAP | VC-O7: Call Service | `6a9ae03403c95f0012d1c056` |
|
|
59
|
-
| 63 | Git Protocol | VC-O8: Read File | `6a9ae060a626810012611cde` |
|
|
60
|
-
| 64 | Basecamp | VC-O9: Webhook To-dos | `6a9ae0a2a626810012611fe5` |
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
# Verified Credentials Test Flow IDs
|
|
2
|
-
|
|
3
|
-
Workspace: `59d341e9037f7200184a408b`
|
|
4
|
-
|
|
5
|
-
All flows created for testing components with verified credentials.
|
|
6
|
-
Delete all these flows after testing is complete.
|
|
7
|
-
|
|
8
|
-
## Flow IDs
|
|
9
|
-
|
|
10
|
-
| Scenario | Flow ID | Name | Status |
|
|
11
|
-
|---|---|---|---|
|
|
12
|
-
| VC-A4 | `6a9ac39ea6268100125ee352` | REST API V2 — No Auth POST | created |
|
|
13
|
-
| VC-A2 | `6a9ac3aba6268100125ee48e` | REST API V2 — Basic Auth POST | created |
|
|
14
|
-
| VC-A3 | `6a9ac3b6a6268100125ee5fa` | REST API V2 — API Key GET | created |
|
|
15
|
-
| VC-A6 | `6a9ac3c3a6268100125ee859` | REST API V2 — Rebound on 5xx | created |
|
|
16
|
-
| VC-A7 | `6a9ac3d103c95f0012cf8c12` | REST API V2 — Emit Error as Message | created |
|
|
17
|
-
| VC-A8 | `6a9ac3dd03c95f0012cf8ca2` | REST API V2 — Download as Attachment | created |
|
|
18
|
-
| VC-A9 | `6a9ac3e8a6268100125eec9e` | REST API V2 — Custom Headers + Timeout | created |
|
|
19
|
-
| VC-A10 | `6a9ac3f3a6268100125eee21` | REST API V2 — Follow Redirects | created |
|
|
20
|
-
| VC-B1 | `6a9ac415a6268100125ef145` | PostgreSQL SELECT | created |
|
|
21
|
-
| VC-B2 | `6a9ac421a6268100125ef203` | PostgreSQL INSERT from Webhook | created |
|
|
22
|
-
| VC-B5 | `6a9ac449a6268100125ef5bd` | MSSQL SELECT | created |
|
|
23
|
-
| VC-C1 | `6a9ac47fa6268100125efc47` | Salesforce V2 Poll Accounts | created |
|
|
24
|
-
| VC-C7 | `6a9ac48fa6268100125efdd4` | Salesforce V2 Raw Request | created |
|
|
25
|
-
| VC-D1 | `6a9ac4df03c95f0012cf9fba` | SFTP Poll New Files | created |
|
|
26
|
-
| VC-E1 | `6a9ac51f03c95f0012cfa355` | ChatGPT Text Generation | created |
|
|
27
|
-
| VC-A5 | `6a9ac55b03c95f0012cfa725` | REST API V2 — All HTTP Methods Chain | created |
|
|
28
|
-
| VC-B3 | `6a9ac628a6268100125f181b` | PostgreSQL UPDATE with Condition | created |
|
|
29
|
-
| VC-B4 | `6a9ac63803c95f0012cfb5c6` | PostgreSQL DELETE Record | created |
|
|
30
|
-
| VC-B6 | `6a9ac65503c95f0012cfb6cf` | MSSQL INSERT from Webhook | created |
|
|
31
|
-
| VC-B7 | `6a9ac678a6268100125f20a8` | MSSQL Stored Procedure | created |
|
|
32
|
-
| VC-B8 | `6a9ac699a6268100125f2260` | MongoDB Lookup by ID | created |
|
|
33
|
-
| VC-B9 | `6a9ac6a303c95f0012cfbc00` | MongoDB Upsert Document | created |
|
|
34
|
-
| VC-B10 | `6a9ac6b1a6268100125f253b` | MongoDB Aggregate Pipeline | created |
|
|
35
|
-
| VC-B11 | `6a9ac6baa6268100125f26a4` | MongoDB Delete by Criteria | created |
|
|
36
|
-
| VC-B12 | `6a9ac6e8a6268100125f29c7` | JDBC MySQL Query | created |
|
|
37
|
-
| VC-B13 | `6a9ac719a6268100125f2ae8` | JDBC PostgreSQL Query | created |
|
|
38
|
-
| VC-B14 | `6a9ac72403c95f0012cfc5d6` | JDBC MSSQL Query | created |
|
|
39
|
-
| VC-B16 | `6a9ac738a6268100125f2c9e` | JDBC Cross-DB Compare | created |
|
|
40
|
-
| VC-B17 | `6a9ac75da6268100125f2ecd` | PS/PostgreSQL SELECT | created |
|
|
41
|
-
| VC-B18 | `6a9ac77a03c95f0012cfcd74` | PS/MongoDB Lookup | created |
|
|
42
|
-
| VC-B19 | `6a9ac79aa6268100125f340e` | PS/JDBC Multi-DB Test | created |
|
|
43
|
-
| VC-C2 | `6a9ac7c303c95f0012cfd165` | Salesforce V2 SOQL Query | created |
|
|
44
|
-
| VC-C3 | `6a9ac7d0a6268100125f37f0` | Salesforce V2 Lookup Contact | created |
|
|
45
|
-
| VC-C4 | `6a9ac7e2a6268100125f39ad` | Salesforce V2 Create Lead | created |
|
|
46
|
-
| VC-C5 | `6a9ac7eca6268100125f3a03` | Salesforce V2 Upsert Contact | created |
|
|
47
|
-
| VC-C6 | `6a9ac7f403c95f0012cfd6fe` | Salesforce V2 Delete Lead | created |
|
|
48
|
-
| VC-C8 | `6a9ac7ffa6268100125f3b74` | Salesforce V2 Lookup Objects | created |
|
|
49
|
-
| VC-C9 | `6a9ac80903c95f0012cfd8ed` | Salesforce V2 Bulk Query | created |
|
|
50
|
-
| VC-C10 | `6a9acd3aa6268100125fda9f` | Salesforce V2 Subscribe PubSub | created |
|
|
51
|
-
| VC-C11 | `6a9acd5403c95f0012d06df4` | PS/Salesforce V2 Query | created |
|
|
52
|
-
| VC-D2 | `6a9ace39a6268100125fe983` | SFTP Upload File | created |
|
|
53
|
-
| VC-D3 | `6a9ace84a6268100125fee63` | SFTP Poll CSV Parse Split | created |
|
|
54
|
-
| VC-D4 | `6a9ace98a6268100125fef63` | SFTP Move File After Processing | created |
|
|
55
|
-
| VC-D5 | `6a9acee403c95f0012d08b72` | PS/SFTP Poll Files | created |
|
|
56
|
-
| VC-D6 | `6a9acf5a03c95f0012d0956c` | PS/SFTP Upload Private Key Auth | created |
|
|
57
|
-
| VC-D7 | `6a9acf7ca6268100126002ca` | AWS S3 Poll New Objects | created |
|
|
58
|
-
| VC-D8 | `6a9acf8a03c95f0012d0985f` | AWS S3 Upload Object | created |
|
|
59
|
-
| VC-D9 | `6a9acf98a62681001260062e` | AWS S3 Download to SFTP Upload | created |
|
|
60
|
-
| VC-D10 | `6a9acfb2a626810012600962` | Azure Data Lake Read | created |
|
|
61
|
-
| VC-D11 | `6a9acfc2a626810012600b1d` | Azure Data Lake Write | created |
|
|
62
|
-
| VC-D12 | `6a9ad004a626810012600f53` | Google Drive Upload File | created |
|
|
63
|
-
| VC-D13 | `6a9ad00ea626810012600fe9` | Google Drive Download File | created |
|
|
64
|
-
| VC-E2 | `6a9ad05603c95f0012d0a7c0` | ChatGPT Data Extraction | created |
|
|
65
|
-
| VC-E3 | `6a9ad060a62681001260139d` | ChatGPT Summarization | created |
|
|
66
|
-
| VC-E4 | `6a9ad08a03c95f0012d0ac56` | Claude AI Text Generation | created |
|
|
67
|
-
| VC-E5 | `6a9ad0a303c95f0012d0af04` | Claude AI Code Review | created |
|
|
68
|
-
| VC-E6 | `6a9ad0e303c95f0012d0b2f3` | Gemini Text Generation | created |
|
|
69
|
-
| VC-E7 | `6a9ad0ed03c95f0012d0b39f` | Gemini Classification | created |
|
|
70
|
-
| VC-E8 | `6a9ad10b03c95f0012d0b5b0` | Grok Text Generation | created |
|
|
71
|
-
| VC-F1 | `6a9ad12ba6268100126020dd` | HubSpot Poll Contacts | created |
|
|
72
|
-
| VC-F2 | `6a9ad138a626810012602268` | HubSpot Create Deal | created |
|
|
73
|
-
| VC-F3 | `6a9ad153a626810012602456` | HubSpot Lookup Company | created |
|
|
74
|
-
| VC-F4 | `6a9ad179a62681001260263e` | Zoho CRM Poll Leads | created |
|
|
75
|
-
| VC-F5 | `6a9ad18da6268100126028c1` | Zoho CRM Create Contact | created |
|
|
76
|
-
| VC-F6 | `6a9ad2af03c95f0012d0d137` | Close CRM Poll Leads | created |
|
|
77
|
-
| VC-F7 | `6a9ad30ca626810012604269` | Close CRM Create Lead | created |
|
|
78
|
-
| VC-F8 | `6a9ad6a403c95f0012d10892` | Odoo Poll Partners | created |
|
|
79
|
-
| VC-F10 | `6a9ad6c1a626810012607c62` | Freshworks Poll Contacts | created |
|
|
80
|
-
| VC-F12 | `6a9ad6d403c95f0012d10cef` | Apptivo Raw Request Contacts | created |
|
|
81
|
-
| VC-F13 | `6a9ad77403c95f0012d1196e` | Square Poll Payments | created |
|
|
82
|
-
| VC-F14 | `6a9ad790a6268100126087ba` | Square Create Customer | created |
|
|
83
|
-
| VC-F15 | `6a9ad795a62681001260884a` | Stripe Lookup Charges | created |
|
|
84
|
-
| VC-F16 | `6a9ad798a6268100126088fb` | Stripe Create Customer | created |
|
|
85
|
-
| VC-F17 | `6a9ad85a03c95f0012d1286c` | Klaviyo Poll Profiles | created |
|
|
86
|
-
| VC-F18 | `6a9ad85d03c95f0012d128d0` | Klaviyo Create Profile | created |
|
|
87
|
-
| VC-F19 | `6a9ad88c03c95f0012d12c0e` | MailChimp Subscribe Contact | created |
|
|
88
|
-
| VC-F21 | `6a9ad89403c95f0012d12cdc` | Marketo Poll Leads | created |
|
|
89
|
-
| VC-F22 | `6a9ad8a103c95f0012d12f25` | Marketo Upsert Lead | created |
|
|
90
|
-
| VC-G1 | `6a9ad8f903c95f0012d13401` | Magento 2 Poll Orders | created |
|
|
91
|
-
| VC-G2 | `6a9ad914a62681001260a136` | Magento 2 Upsert Product | created |
|
|
92
|
-
| VC-G3 | `6a9ad919a62681001260a1f6` | Magento 2 Lookup Customer | created |
|
|
93
|
-
| VC-G4 | `6a9ad90603c95f0012d13621` | PS/Magento 2 Poll Orders | created |
|
|
94
|
-
| VC-G5 | `6a9ad93ea62681001260a50a` | Shopify Admin V1 Poll Products | created |
|
|
95
|
-
| VC-G6 | `6a9ad942a62681001260a57c` | Shopify Admin V2 Poll Orders | created |
|
|
96
|
-
| VC-G9 | `6a9ad966a62681001260a90d` | VTEX Poll Customers | created |
|
|
97
|
-
| VC-G12 | `6a9ad971a62681001260aa9f` | Amazon SP Poll Orders | created |
|
|
98
|
-
| VC-H5 | `6a9ad9fc03c95f0012d146d4` | SAP Business One Poll Partners | created |
|
|
99
|
-
| VC-H6 | `6a9ada0003c95f0012d14784` | SAP ByDesign Poll Orders | created |
|
|
100
|
-
| VC-H7 | `6a9ada0fa62681001260b4a3` | MS Dynamics CRM V2 Poll Accounts | created |
|
|
101
|
-
| VC-H8 | `6a9ada1fa62681001260b5f6` | MS Dynamics CRM V2 Upsert Contact | created |
|
|
102
|
-
| VC-H9 | `6a9ada27a62681001260b6b8` | MS Dynamics CRM V2 Lookup | created |
|
|
103
|
-
| VC-H10 | `6a9ada4f03c95f0012d14c69` | MS Dynamics BC OnPrem Poll Items | created |
|
|
104
|
-
| VC-H11 | `6a9ada6703c95f0012d14d2d` | Custom MS Dynamics BC Poll Records | created |
|
|
105
|
-
| VC-H12 | `6a9ada6ca62681001260bdb1` | AFAS Poll Records | created |
|
|
106
|
-
| VC-H13 | `6a9ada7203c95f0012d14f1e` | AFAS Create Record | created |
|
|
107
|
-
| VC-H16 | `6a9ada7703c95f0012d14fc3` | Tableau Cloud Poll Objects | created |
|
|
108
|
-
| VC-I1 | `6a9adad503c95f0012d15767` | Slack Send Message | created |
|
|
109
|
-
| VC-I3 | `6a9adad7a62681001260c3b4` | Telegram Send Message | created |
|
|
110
|
-
| VC-I5 | `6a9adadea62681001260c557` | WhatsApp Send Message | created |
|
|
111
|
-
| VC-I6 | `6a9adae0a62681001260c5bf` | Email Send via SMTP | created |
|
|
112
|
-
| VC-I8 | `6a9adae2a62681001260c631` | ClickSend SMS Send | created |
|
|
113
|
-
| VC-J1 | `6a9adc95a62681001260dca3` | Google Sheets V2 — Read Rows | created |
|
|
114
|
-
| VC-J2 | `6a9adca103c95f0012d17845` | Google Sheets V2 — Append Row | created |
|
|
115
|
-
| VC-J3 | `6a9adcb3a62681001260e066` | Google Sheets V2 — Update Row | created |
|
|
116
|
-
| VC-J4 | `6a9adcf1a62681001260e5b8` | Gmail — Poll New Emails | created |
|
|
117
|
-
| VC-J5 | `6a9adcfd03c95f0012d17cde` | Gmail — Send Email | created |
|
|
118
|
-
| VC-J6 | `6a9add1503c95f0012d17ece` | Google Analytics — Run Report | created |
|
|
119
|
-
| VC-J7 | `6a9add32a62681001260eb2b` | Google Translate — Translate Text | created |
|
|
120
|
-
| VC-J10 | `6a9add47a62681001260ec1b` | Google Pub/Sub — Publish Message | created |
|
|
121
|
-
| VC-J11 | `6a9add5403c95f0012d1830c` | Google Pub/Sub — Subscribe and Process | created |
|
|
122
|
-
| VC-K1 | `6a9add7ca62681001260f010` | Outlook — Poll New Emails | created |
|
|
123
|
-
| VC-K2 | `6a9add92a62681001260f1a3` | Outlook — Send Email | created |
|
|
124
|
-
| VC-K3 | `6a9addb803c95f0012d18b9f` | Monday — Webhook New Items | created |
|
|
125
|
-
| VC-K4 | `6a9addcb03c95f0012d18dd1` | Monday — Create Item | created |
|
|
126
|
-
| VC-L1 | `6a9adde1a62681001260f745` | AMQP — Publish Message | created |
|
|
127
|
-
| VC-L2 | `6a9addef03c95f0012d1903a` | AMQP — Consume Messages | created |
|
|
128
|
-
| VC-L4 | `6a9ade05a62681001260fa6e` | AWS SQS — Send Message | created |
|
|
129
|
-
| VC-L5 | `6a9ade0fa62681001260facd` | AWS SQS — Receive Messages | created |
|
|
130
|
-
| VC-M1 | `6a9ade26a62681001260fc98` | iLovePDF — Merge PDFs | created |
|
|
131
|
-
| VC-M2 | `6a9ade3103c95f0012d1964d` | iLovePDF — Compress PDF | created |
|
|
132
|
-
| VC-M3 | `6a9ade4c03c95f0012d198e0` | Picsart — Remove Background | created |
|
|
133
|
-
| VC-M4 | `6a9adeb3a6268100126106ae` | Bynder — Poll Assets | created |
|
|
134
|
-
| VC-M6 | `6a9adee703c95f0012d1a26b` | PandaDoc — Poll Documents | created |
|
|
135
|
-
| VC-M8 | `6a9adefd03c95f0012d1a548` | WordPress — Poll Posts | created |
|
|
136
|
-
| VC-M9 | `6a9adf0ba626810012610a30` | WordPress — Create Post | created |
|
|
137
|
-
| VC-N1 | `6a9adf36a626810012610c58` | Twitter — Post Tweet | created |
|
|
138
|
-
| VC-N2 | `6a9adf64a626810012610e8b` | Pinterest — Create Pin (Sandbox) | created |
|
|
139
|
-
| VC-N3 | `6a9adf7ea6268100126110ff` | Kit — Poll Subscribers | created |
|
|
140
|
-
| VC-N4 | `6a9adf8e03c95f0012d1b1f3` | Kit — Create Subscriber | created |
|
|
141
|
-
| VC-O3 | `6a9adffc03c95f0012d1bbce` | DeepL — Translate Text | created |
|
|
142
|
-
| VC-O5 | `6a9ae02403c95f0012d1be2a` | SmartyStreets — Validate Address | created |
|
|
143
|
-
| VC-O7 | `6a9ae03403c95f0012d1c056` | SOAP — Call Service | created |
|
|
144
|
-
| VC-O8 | `6a9ae060a626810012611cde` | Git Protocol — Read File | created |
|
|
145
|
-
| VC-O9 | `6a9ae0a2a626810012611fe5` | Basecamp — Webhook To-dos | created |
|
|
146
|
-
| VC-O11 | `6a9ae0daa6268100126125a7` | Code with Creds — Basic Auth | created |
|
|
147
|
-
| VC-O12 | `6a9ae0e3a626810012612601` | Code with Creds — API Key | created |
|
|
148
|
-
| VC-O13 | `6a9ae0eca62681001261266a` | Code with Creds — OAuth2 | created |
|
|
149
|
-
| VC-O14 | `6a9ae0f8a6268100126127f9` | Code with Creds — No Auth | created |
|
|
150
|
-
| VC-P1 | `6a9ae12da626810012612bee` | PS/Webhook — No Auth | created |
|
|
151
|
-
| VC-P2 | `6a9ae13703c95f0012d1d287` | PS/Webhook — Basic Auth | created |
|
|
152
|
-
| VC-P3 | `6a9ae28503c95f0012d1e6a6` | PS/Webhook API Key Auth | created |
|
|
153
|
-
| VC-P4 | `6a9ae292a626810012614230` | PS/Webhook HMAC 256 Auth | created |
|
|
154
|
-
| VC-P5 | `6a9ae29c03c95f0012d1e8f4` | PS/Webhook HMAC 512 Auth | created |
|
|
155
|
-
| VC-Q1 | `6a9d8a07a62681001289bc30` | CRM to eCommerce Sync | created |
|
|
156
|
-
| VC-Q3 | `6a9d8a6ca62681001289c32a` | Multi-CRM Lead Sync | created |
|
|
157
|
-
| VC-Q5 | `6a9d8ac503c95f0012f9ab1b` | AI-Enriched Contact Pipeline | created |
|
|
158
|
-
| VC-Q6 | `6a9d8afda62681001289ce23` | Multi-Database ETL | created |
|
|
159
|
-
| VC-Q10 | `6a9d8b2203c95f0012f9b05f` | Social Media Content Pipeline | created |
|
|
160
|
-
| VC-Q12 | `6a9d8b3803c95f0012f9b22c` | Customer Onboarding Pipeline | created |
|
|
161
|
-
| VC-Q13 | `6a9d8b6803c95f0012f9b5c2` | Order Notification Multi-Channel | created |
|
|
162
|
-
| VC-Q16 | `6a9d8c8603c95f0012f9cbae` | AI Support Ticket Triage | created |
|
|
163
|
-
| VC-Q18 | `6a9d8b86a62681001289d93c` | Webhook Full Audit Trail | created |
|
|
164
|
-
| VC-Q19 | `6a9d8c9ea62681001289f1d8` | Queue-Driven Processing | created |
|
|
165
|
-
| VC-Q20 | `6a9d8b9603c95f0012f9ba25` | Email Monitoring Pipeline | created |
|
|
166
|
-
| VC-Q21 | `6a9d8baba62681001289dc26` | Multi-Step Data Enrichment | created |
|
|
167
|
-
| VC-Q25 | `6a9d8bbda62681001289dd71` | Dynamics CRM to Salesforce Migration | created |
|
|
168
|
-
| VC-Q26 | `6a9d8bcf03c95f0012f9bf91` | Real-Time Webhook Router with Logging | created |
|
|
169
|
-
| VC-Q27 | `6a9ac533a6268100125f0962` | Scheduled Health Check | created |
|
|
170
|
-
| VC-Q30 | `6a9d8beda62681001289e329` | Full eCommerce Order Lifecycle | created |
|
|
171
|
-
| VC-Q34 | `6a9d8c0203c95f0012f9c21a` | Lead Scoring Pipeline | created |
|
|
172
|
-
| VC-Q39 | `6a9d8c1f03c95f0012f9c562` | Multi-Step Approval Pipeline | created |
|
|
173
|
-
| VC-Q40 | `6a9d8c3903c95f0012f9c799` | IoT Data Pipeline Simulation | created |
|
|
174
|
-
| VC-Q2 | `6a9d949703c95f0012fa3f0e` | eCommerce to ERP Order Sync | created |
|
|
175
|
-
| VC-Q4 | `6a9d95ab03c95f0012fa51b1` | File Processing Pipeline | created |
|
|
176
|
-
| VC-Q7 | `6a9d943fa6268100128a69cf` | Document Generation Pipeline | created |
|
|
177
|
-
| VC-Q8 | `6a9d94ea03c95f0012fa456d` | Address Validation + CRM Update | created |
|
|
178
|
-
| VC-Q9 | `6a9d95cba6268100128a803d` | Inventory Cross-Platform Sync | created |
|
|
179
|
-
| VC-Q11 | `6a9d9555a6268100128a7b16` | Translation Pipeline Multi-Engine | created |
|
|
180
|
-
| VC-Q14 | `6a9d963403c95f0012fa5a63` | Database Backup to Cloud | created |
|
|
181
|
-
| VC-Q15 | `6a9d983da6268100128aada4` | ERP Sync SAP to NetSuite | created |
|
|
182
|
-
| VC-Q17 | `6a9d96e903c95f0012fa663d` | Google Sheets to Multi-DB Sync | created |
|
|
183
|
-
| VC-Q22 | `6a9d972903c95f0012fa6a88` | File Sync SFTP to S3 to Drive | created |
|
|
184
|
-
| VC-Q23 | `6a9d97c903c95f0012fa74d9` | eCommerce to Analytics Pipeline | created |
|
|
185
|
-
| VC-Q24 | `6a9d986103c95f0012fa7f52` | Payment Reconciliation | created |
|
|
186
|
-
| VC-Q28 | `6a9d97e803c95f0012fa76d2` | CSV Import with Validation | created |
|
|
187
|
-
| VC-Q29 | `6a9d9896a6268100128ab38e` | AI Content Generation Pipeline | created |
|
|
188
|
-
| VC-Q31 | `6a9d98b3a6268100128ab755` | Multi-Messenger Customer Service | created |
|
|
189
|
-
| VC-Q32 | `6a9d98d3a6268100128ab96e` | DAM to eCommerce Asset Pipeline | created |
|
|
190
|
-
| VC-Q33 | `6a9d98f5a6268100128abb98` | Financial Reporting Pipeline | created |
|
|
191
|
-
| VC-Q36 | `6a9d992103c95f0012fa8cd9` | Airtable to Multi-Platform Publish | created |
|
|
192
|
-
| VC-Q37 | `6a9d9805a6268100128aa950` | SFTP to DB to Notification Chain | created |
|
|
193
|
-
| VC-Q38 | `6a9d982403c95f0012fa7a34` | Real-time CRM Enrichment | created |
|