@unclick/mcp-server 0.2.3 → 0.2.5
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 +139 -153
- package/dist/airtable-tool.d.ts +2 -0
- package/dist/airtable-tool.d.ts.map +1 -0
- package/dist/airtable-tool.js +154 -0
- package/dist/airtable-tool.js.map +1 -0
- package/dist/algolia-tool.d.ts +5 -0
- package/dist/algolia-tool.d.ts.map +1 -0
- package/dist/algolia-tool.js +121 -0
- package/dist/algolia-tool.js.map +1 -0
- package/dist/anthropic-tool.d.ts +3 -0
- package/dist/anthropic-tool.d.ts.map +1 -0
- package/dist/anthropic-tool.js +123 -0
- package/dist/anthropic-tool.js.map +1 -0
- package/dist/asana-tool.d.ts +8 -0
- package/dist/asana-tool.d.ts.map +1 -0
- package/dist/asana-tool.js +218 -0
- package/dist/asana-tool.js.map +1 -0
- package/dist/assemblyai-tool.d.ts +7 -0
- package/dist/assemblyai-tool.d.ts.map +1 -0
- package/dist/assemblyai-tool.js +127 -0
- package/dist/assemblyai-tool.js.map +1 -0
- package/dist/calendly-tool.d.ts +6 -0
- package/dist/calendly-tool.d.ts.map +1 -0
- package/dist/calendly-tool.js +182 -0
- package/dist/calendly-tool.js.map +1 -0
- package/dist/circleci-tool.d.ts +7 -0
- package/dist/circleci-tool.d.ts.map +1 -0
- package/dist/circleci-tool.js +133 -0
- package/dist/circleci-tool.js.map +1 -0
- package/dist/clickup-tool.d.ts +2 -0
- package/dist/clickup-tool.d.ts.map +1 -0
- package/dist/clickup-tool.js +153 -0
- package/dist/clickup-tool.js.map +1 -0
- package/dist/cohere-tool.d.ts +7 -0
- package/dist/cohere-tool.d.ts.map +1 -0
- package/dist/cohere-tool.js +225 -0
- package/dist/cohere-tool.js.map +1 -0
- package/dist/connectors/figma.d.ts +3 -0
- package/dist/connectors/figma.d.ts.map +1 -0
- package/dist/connectors/figma.js +18 -0
- package/dist/connectors/figma.js.map +1 -0
- package/dist/connectors/index.d.ts +3 -1
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +5 -1
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/line.d.ts +3 -0
- package/dist/connectors/line.d.ts.map +1 -0
- package/dist/connectors/line.js +18 -0
- package/dist/connectors/line.js.map +1 -0
- package/dist/convertkit-tool.d.ts +7 -0
- package/dist/convertkit-tool.d.ts.map +1 -0
- package/dist/convertkit-tool.js +213 -0
- package/dist/convertkit-tool.js.map +1 -0
- package/dist/datadog-tool.d.ts +7 -0
- package/dist/datadog-tool.d.ts.map +1 -0
- package/dist/datadog-tool.js +121 -0
- package/dist/datadog-tool.js.map +1 -0
- package/dist/deepl-tool.d.ts +5 -0
- package/dist/deepl-tool.d.ts.map +1 -0
- package/dist/deepl-tool.js +137 -0
- package/dist/deepl-tool.js.map +1 -0
- package/dist/ebay-tool.d.ts +5 -0
- package/dist/ebay-tool.d.ts.map +1 -0
- package/dist/ebay-tool.js +179 -0
- package/dist/ebay-tool.js.map +1 -0
- package/dist/elevenlabs-tool.d.ts +6 -0
- package/dist/elevenlabs-tool.d.ts.map +1 -0
- package/dist/elevenlabs-tool.js +166 -0
- package/dist/elevenlabs-tool.js.map +1 -0
- package/dist/etsy-tool.d.ts +6 -0
- package/dist/etsy-tool.d.ts.map +1 -0
- package/dist/etsy-tool.js +125 -0
- package/dist/etsy-tool.js.map +1 -0
- package/dist/exchangerate-tool.d.ts +5 -0
- package/dist/exchangerate-tool.d.ts.map +1 -0
- package/dist/exchangerate-tool.js +139 -0
- package/dist/exchangerate-tool.js.map +1 -0
- package/dist/figma-tool.d.ts +8 -0
- package/dist/figma-tool.d.ts.map +1 -0
- package/dist/figma-tool.js +231 -0
- package/dist/figma-tool.js.map +1 -0
- package/dist/flyio-tool.d.ts +6 -0
- package/dist/flyio-tool.d.ts.map +1 -0
- package/dist/flyio-tool.js +158 -0
- package/dist/flyio-tool.js.map +1 -0
- package/dist/gdelt-tool.d.ts +5 -0
- package/dist/gdelt-tool.d.ts.map +1 -0
- package/dist/gdelt-tool.js +177 -0
- package/dist/gdelt-tool.js.map +1 -0
- package/dist/github-tool.d.ts +2 -0
- package/dist/github-tool.d.ts.map +1 -0
- package/dist/github-tool.js +165 -0
- package/dist/github-tool.js.map +1 -0
- package/dist/gitlab-tool.d.ts +2 -0
- package/dist/gitlab-tool.d.ts.map +1 -0
- package/dist/gitlab-tool.js +127 -0
- package/dist/gitlab-tool.js.map +1 -0
- package/dist/groq-tool.d.ts +3 -0
- package/dist/groq-tool.d.ts.map +1 -0
- package/dist/groq-tool.js +109 -0
- package/dist/groq-tool.js.map +1 -0
- package/dist/gumroad-tool.d.ts +6 -0
- package/dist/gumroad-tool.d.ts.map +1 -0
- package/dist/gumroad-tool.js +90 -0
- package/dist/gumroad-tool.js.map +1 -0
- package/dist/heygen-tool.d.ts +5 -0
- package/dist/heygen-tool.d.ts.map +1 -0
- package/dist/heygen-tool.js +134 -0
- package/dist/heygen-tool.js.map +1 -0
- package/dist/higgsfield-tool.d.ts +5 -0
- package/dist/higgsfield-tool.d.ts.map +1 -0
- package/dist/higgsfield-tool.js +120 -0
- package/dist/higgsfield-tool.js.map +1 -0
- package/dist/igdb-tool.d.ts +6 -0
- package/dist/igdb-tool.d.ts.map +1 -0
- package/dist/igdb-tool.js +140 -0
- package/dist/igdb-tool.js.map +1 -0
- package/dist/keychain-crypto.d.ts +24 -0
- package/dist/keychain-crypto.d.ts.map +1 -0
- package/dist/keychain-crypto.js +60 -0
- package/dist/keychain-crypto.js.map +1 -0
- package/dist/keychain-secure-input.d.ts +17 -0
- package/dist/keychain-secure-input.d.ts.map +1 -0
- package/dist/keychain-secure-input.js +229 -0
- package/dist/keychain-secure-input.js.map +1 -0
- package/dist/keychain-tool.d.ts +3 -0
- package/dist/keychain-tool.d.ts.map +1 -0
- package/dist/keychain-tool.js +516 -0
- package/dist/keychain-tool.js.map +1 -0
- package/dist/kling-tool.d.ts +3 -0
- package/dist/kling-tool.d.ts.map +1 -0
- package/dist/kling-tool.js +102 -0
- package/dist/kling-tool.js.map +1 -0
- package/dist/lemonsqueezy-tool.d.ts +7 -0
- package/dist/lemonsqueezy-tool.d.ts.map +1 -0
- package/dist/lemonsqueezy-tool.js +220 -0
- package/dist/lemonsqueezy-tool.js.map +1 -0
- package/dist/line-tool.d.ts +7 -0
- package/dist/line-tool.d.ts.map +1 -0
- package/dist/line-tool.js +188 -0
- package/dist/line-tool.js.map +1 -0
- package/dist/linear-tool.d.ts +2 -0
- package/dist/linear-tool.d.ts.map +1 -0
- package/dist/linear-tool.js +186 -0
- package/dist/linear-tool.js.map +1 -0
- package/dist/local-catalog-handlers.d.ts +3 -0
- package/dist/local-catalog-handlers.d.ts.map +1 -0
- package/dist/local-catalog-handlers.js +1254 -0
- package/dist/local-catalog-handlers.js.map +1 -0
- package/dist/mailchimp-tool.d.ts +8 -0
- package/dist/mailchimp-tool.d.ts.map +1 -0
- package/dist/mailchimp-tool.js +138 -0
- package/dist/mailchimp-tool.js.map +1 -0
- package/dist/mapbox-tool.d.ts +6 -0
- package/dist/mapbox-tool.d.ts.map +1 -0
- package/dist/mapbox-tool.js +106 -0
- package/dist/mapbox-tool.js.map +1 -0
- package/dist/mistral-tool.d.ts +4 -0
- package/dist/mistral-tool.d.ts.map +1 -0
- package/dist/mistral-tool.js +145 -0
- package/dist/mistral-tool.js.map +1 -0
- package/dist/mixpanel-tool.d.ts +6 -0
- package/dist/mixpanel-tool.d.ts.map +1 -0
- package/dist/mixpanel-tool.js +162 -0
- package/dist/mixpanel-tool.js.map +1 -0
- package/dist/monday-tool.d.ts +7 -0
- package/dist/monday-tool.d.ts.map +1 -0
- package/dist/monday-tool.js +206 -0
- package/dist/monday-tool.js.map +1 -0
- package/dist/neon-tool.d.ts +7 -0
- package/dist/neon-tool.d.ts.map +1 -0
- package/dist/neon-tool.js +156 -0
- package/dist/neon-tool.js.map +1 -0
- package/dist/openai-tool.d.ts +6 -0
- package/dist/openai-tool.d.ts.map +1 -0
- package/dist/openai-tool.js +227 -0
- package/dist/openai-tool.js.map +1 -0
- package/dist/pagerduty-tool.d.ts +8 -0
- package/dist/pagerduty-tool.d.ts.map +1 -0
- package/dist/pagerduty-tool.js +185 -0
- package/dist/pagerduty-tool.js.map +1 -0
- package/dist/paypal-tool.d.ts +3 -0
- package/dist/paypal-tool.d.ts.map +1 -0
- package/dist/paypal-tool.js +157 -0
- package/dist/paypal-tool.js.map +1 -0
- package/dist/perplexity-tool.d.ts +2 -0
- package/dist/perplexity-tool.d.ts.map +1 -0
- package/dist/perplexity-tool.js +93 -0
- package/dist/perplexity-tool.js.map +1 -0
- package/dist/pika-tool.d.ts +4 -0
- package/dist/pika-tool.d.ts.map +1 -0
- package/dist/pika-tool.js +102 -0
- package/dist/pika-tool.js.map +1 -0
- package/dist/pinecone-tool.d.ts +6 -0
- package/dist/pinecone-tool.d.ts.map +1 -0
- package/dist/pinecone-tool.js +148 -0
- package/dist/pinecone-tool.js.map +1 -0
- package/dist/pinterest-tool.d.ts +7 -0
- package/dist/pinterest-tool.d.ts.map +1 -0
- package/dist/pinterest-tool.js +219 -0
- package/dist/pinterest-tool.js.map +1 -0
- package/dist/plaid-tool.d.ts +6 -0
- package/dist/plaid-tool.d.ts.map +1 -0
- package/dist/plaid-tool.js +149 -0
- package/dist/plaid-tool.js.map +1 -0
- package/dist/postman-tool.d.ts +2 -0
- package/dist/postman-tool.d.ts.map +1 -0
- package/dist/postman-tool.js +92 -0
- package/dist/postman-tool.js.map +1 -0
- package/dist/postmark-tool.d.ts +7 -0
- package/dist/postmark-tool.d.ts.map +1 -0
- package/dist/postmark-tool.js +148 -0
- package/dist/postmark-tool.js.map +1 -0
- package/dist/pushover-tool.d.ts +6 -0
- package/dist/pushover-tool.d.ts.map +1 -0
- package/dist/pushover-tool.js +146 -0
- package/dist/pushover-tool.js.map +1 -0
- package/dist/qc-tool.d.ts +4 -0
- package/dist/qc-tool.d.ts.map +1 -0
- package/dist/qc-tool.js +415 -0
- package/dist/qc-tool.js.map +1 -0
- package/dist/quickbooks-tool.d.ts +5 -0
- package/dist/quickbooks-tool.d.ts.map +1 -0
- package/dist/quickbooks-tool.js +160 -0
- package/dist/quickbooks-tool.js.map +1 -0
- package/dist/render-tool.d.ts +7 -0
- package/dist/render-tool.d.ts.map +1 -0
- package/dist/render-tool.js +158 -0
- package/dist/render-tool.js.map +1 -0
- package/dist/replicate-tool.d.ts +7 -0
- package/dist/replicate-tool.d.ts.map +1 -0
- package/dist/replicate-tool.js +172 -0
- package/dist/replicate-tool.js.map +1 -0
- package/dist/runway-tool.d.ts +4 -0
- package/dist/runway-tool.d.ts.map +1 -0
- package/dist/runway-tool.js +110 -0
- package/dist/runway-tool.js.map +1 -0
- package/dist/segment-tool.d.ts +6 -0
- package/dist/segment-tool.d.ts.map +1 -0
- package/dist/segment-tool.js +129 -0
- package/dist/segment-tool.js.map +1 -0
- package/dist/sendgrid-tool.d.ts +7 -0
- package/dist/sendgrid-tool.d.ts.map +1 -0
- package/dist/sendgrid-tool.js +124 -0
- package/dist/sendgrid-tool.js.map +1 -0
- package/dist/sentry-tool.d.ts +2 -0
- package/dist/sentry-tool.d.ts.map +1 -0
- package/dist/sentry-tool.js +123 -0
- package/dist/sentry-tool.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -0
- package/dist/server.js.map +1 -1
- package/dist/speedrun-tool.d.ts +6 -0
- package/dist/speedrun-tool.d.ts.map +1 -0
- package/dist/speedrun-tool.js +192 -0
- package/dist/speedrun-tool.js.map +1 -0
- package/dist/spotify-tool.d.ts +8 -0
- package/dist/spotify-tool.d.ts.map +1 -0
- package/dist/spotify-tool.js +274 -0
- package/dist/spotify-tool.js.map +1 -0
- package/dist/square-tool.d.ts +5 -0
- package/dist/square-tool.d.ts.map +1 -0
- package/dist/square-tool.js +133 -0
- package/dist/square-tool.js.map +1 -0
- package/dist/stability-tool.d.ts +5 -0
- package/dist/stability-tool.d.ts.map +1 -0
- package/dist/stability-tool.js +190 -0
- package/dist/stability-tool.js.map +1 -0
- package/dist/steam-tool.d.ts +6 -0
- package/dist/steam-tool.d.ts.map +1 -0
- package/dist/steam-tool.js +222 -0
- package/dist/steam-tool.js.map +1 -0
- package/dist/stripe-tool.d.ts +7 -0
- package/dist/stripe-tool.d.ts.map +1 -0
- package/dist/stripe-tool.js +181 -0
- package/dist/stripe-tool.js.map +1 -0
- package/dist/tiktok-tool.d.ts +4 -0
- package/dist/tiktok-tool.d.ts.map +1 -0
- package/dist/tiktok-tool.js +129 -0
- package/dist/tiktok-tool.js.map +1 -0
- package/dist/togetherai-tool.d.ts +5 -0
- package/dist/togetherai-tool.d.ts.map +1 -0
- package/dist/togetherai-tool.js +129 -0
- package/dist/togetherai-tool.js.map +1 -0
- package/dist/toilets-tool.js +2 -2
- package/dist/tool-wiring.d.ts +7982 -18
- package/dist/tool-wiring.d.ts.map +1 -1
- package/dist/tool-wiring.js +5084 -18
- package/dist/tool-wiring.js.map +1 -1
- package/dist/trello-tool.d.ts +2 -0
- package/dist/trello-tool.d.ts.map +1 -0
- package/dist/trello-tool.js +166 -0
- package/dist/trello-tool.js.map +1 -0
- package/dist/turso-tool.d.ts +6 -0
- package/dist/turso-tool.d.ts.map +1 -0
- package/dist/turso-tool.js +158 -0
- package/dist/turso-tool.js.map +1 -0
- package/dist/twilio-tool.d.ts +8 -0
- package/dist/twilio-tool.d.ts.map +1 -0
- package/dist/twilio-tool.js +243 -0
- package/dist/twilio-tool.js.map +1 -0
- package/dist/upstash-tool.d.ts +8 -0
- package/dist/upstash-tool.d.ts.map +1 -0
- package/dist/upstash-tool.js +191 -0
- package/dist/upstash-tool.js.map +1 -0
- package/dist/whatsapp-tool.d.ts +6 -0
- package/dist/whatsapp-tool.d.ts.map +1 -0
- package/dist/whatsapp-tool.js +200 -0
- package/dist/whatsapp-tool.js.map +1 -0
- package/dist/woocommerce-tool.d.ts +4 -0
- package/dist/woocommerce-tool.d.ts.map +1 -0
- package/dist/woocommerce-tool.js +140 -0
- package/dist/woocommerce-tool.js.map +1 -0
- package/dist/youtube-tool.d.ts +7 -0
- package/dist/youtube-tool.d.ts.map +1 -0
- package/dist/youtube-tool.js +196 -0
- package/dist/youtube-tool.js.map +1 -0
- package/package.json +1 -1
- package/server.json +37 -37
- package/LICENSE +0 -216
- package/dist/cloudflare-worker.d.ts +0 -12
- package/dist/cloudflare-worker.d.ts.map +0 -1
- package/dist/cloudflare-worker.js +0 -50
- package/dist/cloudflare-worker.js.map +0 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
// Render hosting API integration for the UnClick MCP server.
|
|
2
|
+
// Uses the Render REST API via fetch - no external dependencies.
|
|
3
|
+
// Users must supply an API key from dashboard.render.com/u/{user}/account/api-keys.
|
|
4
|
+
const RENDER_API_BASE = "https://api.render.com/v1";
|
|
5
|
+
// ── Fetch helper ──────────────────────────────────────────────────────────────
|
|
6
|
+
async function renderFetch(apiKey, method, path, body, query) {
|
|
7
|
+
const url = new URL(`${RENDER_API_BASE}${path}`);
|
|
8
|
+
if (query) {
|
|
9
|
+
for (const [k, v] of Object.entries(query)) {
|
|
10
|
+
if (v !== undefined && v !== "")
|
|
11
|
+
url.searchParams.set(k, String(v));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const headers = {
|
|
15
|
+
Authorization: `Bearer ${apiKey}`,
|
|
16
|
+
Accept: "application/json",
|
|
17
|
+
};
|
|
18
|
+
if (body !== undefined)
|
|
19
|
+
headers["Content-Type"] = "application/json";
|
|
20
|
+
let response;
|
|
21
|
+
try {
|
|
22
|
+
response = await fetch(url.toString(), {
|
|
23
|
+
method,
|
|
24
|
+
headers,
|
|
25
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
return { error: `Network error reaching Render API: ${err instanceof Error ? err.message : String(err)}` };
|
|
30
|
+
}
|
|
31
|
+
// 204 No Content
|
|
32
|
+
if (response.status === 204)
|
|
33
|
+
return { success: true };
|
|
34
|
+
const text = await response.text();
|
|
35
|
+
let data;
|
|
36
|
+
try {
|
|
37
|
+
data = JSON.parse(text);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
data = { raw: text };
|
|
41
|
+
}
|
|
42
|
+
if (response.status === 401)
|
|
43
|
+
return { error: "Render API key is invalid or expired. Check your api_key.", status: 401 };
|
|
44
|
+
if (response.status === 403)
|
|
45
|
+
return { error: "Render API: insufficient permissions.", status: 403 };
|
|
46
|
+
if (response.status === 404)
|
|
47
|
+
return { error: "Resource not found. Check the service_id.", status: 404 };
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
const errData = data;
|
|
50
|
+
const detail = errData?.message ?? errData?.id ?? text;
|
|
51
|
+
return { error: `Render API error ${response.status}: ${detail}`, status: response.status };
|
|
52
|
+
}
|
|
53
|
+
return data;
|
|
54
|
+
}
|
|
55
|
+
// ── Operations ────────────────────────────────────────────────────────────────
|
|
56
|
+
export async function renderListServices(args) {
|
|
57
|
+
const apiKey = String(args.api_key ?? process.env.RENDER_API_KEY ?? "").trim();
|
|
58
|
+
if (!apiKey)
|
|
59
|
+
return { error: "api_key is required. Get one at dashboard.render.com." };
|
|
60
|
+
try {
|
|
61
|
+
const query = {
|
|
62
|
+
limit: args.limit ? Number(args.limit) : 20,
|
|
63
|
+
};
|
|
64
|
+
if (args.cursor)
|
|
65
|
+
query.cursor = String(args.cursor);
|
|
66
|
+
if (args.type)
|
|
67
|
+
query.type = String(args.type);
|
|
68
|
+
return renderFetch(apiKey, "GET", "/services", undefined, query);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export async function renderGetService(args) {
|
|
75
|
+
const apiKey = String(args.api_key ?? process.env.RENDER_API_KEY ?? "").trim();
|
|
76
|
+
if (!apiKey)
|
|
77
|
+
return { error: "api_key is required. Get one at dashboard.render.com." };
|
|
78
|
+
const serviceId = String(args.service_id ?? "").trim();
|
|
79
|
+
if (!serviceId)
|
|
80
|
+
return { error: "service_id is required." };
|
|
81
|
+
try {
|
|
82
|
+
return renderFetch(apiKey, "GET", `/services/${encodeURIComponent(serviceId)}`);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export async function renderListDeploys(args) {
|
|
89
|
+
const apiKey = String(args.api_key ?? process.env.RENDER_API_KEY ?? "").trim();
|
|
90
|
+
if (!apiKey)
|
|
91
|
+
return { error: "api_key is required. Get one at dashboard.render.com." };
|
|
92
|
+
const serviceId = String(args.service_id ?? "").trim();
|
|
93
|
+
if (!serviceId)
|
|
94
|
+
return { error: "service_id is required." };
|
|
95
|
+
try {
|
|
96
|
+
const query = {};
|
|
97
|
+
if (args.limit)
|
|
98
|
+
query.limit = Number(args.limit);
|
|
99
|
+
return renderFetch(apiKey, "GET", `/services/${encodeURIComponent(serviceId)}/deploys`, undefined, query);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export async function renderTriggerDeploy(args) {
|
|
106
|
+
const apiKey = String(args.api_key ?? process.env.RENDER_API_KEY ?? "").trim();
|
|
107
|
+
if (!apiKey)
|
|
108
|
+
return { error: "api_key is required. Get one at dashboard.render.com." };
|
|
109
|
+
const serviceId = String(args.service_id ?? "").trim();
|
|
110
|
+
if (!serviceId)
|
|
111
|
+
return { error: "service_id is required." };
|
|
112
|
+
try {
|
|
113
|
+
const body = {};
|
|
114
|
+
if (args.clear_cache !== undefined)
|
|
115
|
+
body.clearCache = Boolean(args.clear_cache);
|
|
116
|
+
return renderFetch(apiKey, "POST", `/services/${encodeURIComponent(serviceId)}/deploys`, body);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export async function renderListEnvVars(args) {
|
|
123
|
+
const apiKey = String(args.api_key ?? process.env.RENDER_API_KEY ?? "").trim();
|
|
124
|
+
if (!apiKey)
|
|
125
|
+
return { error: "api_key is required. Get one at dashboard.render.com." };
|
|
126
|
+
const serviceId = String(args.service_id ?? "").trim();
|
|
127
|
+
if (!serviceId)
|
|
128
|
+
return { error: "service_id is required." };
|
|
129
|
+
try {
|
|
130
|
+
return renderFetch(apiKey, "GET", `/services/${encodeURIComponent(serviceId)}/env-vars`);
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export async function renderSetEnvVar(args) {
|
|
137
|
+
const apiKey = String(args.api_key ?? process.env.RENDER_API_KEY ?? "").trim();
|
|
138
|
+
if (!apiKey)
|
|
139
|
+
return { error: "api_key is required. Get one at dashboard.render.com." };
|
|
140
|
+
const serviceId = String(args.service_id ?? "").trim();
|
|
141
|
+
if (!serviceId)
|
|
142
|
+
return { error: "service_id is required." };
|
|
143
|
+
const key = String(args.key ?? "").trim();
|
|
144
|
+
if (!key)
|
|
145
|
+
return { error: "key is required (the environment variable name)." };
|
|
146
|
+
if (args.value === undefined || args.value === null)
|
|
147
|
+
return { error: "value is required." };
|
|
148
|
+
const value = String(args.value);
|
|
149
|
+
try {
|
|
150
|
+
// Render PUT env-vars expects an array of {key, value} pairs
|
|
151
|
+
const body = [{ key, value }];
|
|
152
|
+
return renderFetch(apiKey, "PUT", `/services/${encodeURIComponent(serviceId)}/env-vars`, body);
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=render-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-tool.js","sourceRoot":"","sources":["../src/render-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function replicateListModels(args: Record<string, unknown>): Promise<unknown>;
|
|
2
|
+
export declare function replicateGetModel(args: Record<string, unknown>): Promise<unknown>;
|
|
3
|
+
export declare function replicateCreatePrediction(args: Record<string, unknown>): Promise<unknown>;
|
|
4
|
+
export declare function replicateGetPrediction(args: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
export declare function replicateListPredictions(args: Record<string, unknown>): Promise<unknown>;
|
|
6
|
+
export declare function replicateCancelPrediction(args: Record<string, unknown>): Promise<unknown>;
|
|
7
|
+
//# sourceMappingURL=replicate-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replicate-tool.d.ts","sourceRoot":"","sources":["../src/replicate-tool.ts"],"names":[],"mappings":"AA6GA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBzF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBvF;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAiC/F;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5F;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAY9F;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAa/F"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// Replicate API integration for the UnClick MCP server.
|
|
2
|
+
// Uses the Replicate REST API via fetch - no external dependencies.
|
|
3
|
+
// Users must supply an API token from replicate.com/account/api-tokens.
|
|
4
|
+
const REPLICATE_API_BASE = "https://api.replicate.com/v1";
|
|
5
|
+
// ─── Auth validation ──────────────────────────────────────────────────────────
|
|
6
|
+
function requireToken(args) {
|
|
7
|
+
const token = String(args.api_token ?? "").trim();
|
|
8
|
+
if (!token)
|
|
9
|
+
throw new Error("api_token is required. Get one at replicate.com/account/api-tokens.");
|
|
10
|
+
return token;
|
|
11
|
+
}
|
|
12
|
+
// ─── API helpers ──────────────────────────────────────────────────────────────
|
|
13
|
+
async function replicateGet(token, path) {
|
|
14
|
+
const res = await fetch(`${REPLICATE_API_BASE}${path}`, {
|
|
15
|
+
headers: {
|
|
16
|
+
Authorization: `Bearer ${token}`,
|
|
17
|
+
"Content-Type": "application/json",
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
const data = await res.json();
|
|
21
|
+
if (!res.ok) {
|
|
22
|
+
const detail = data.detail ?? `HTTP ${res.status}`;
|
|
23
|
+
throw new Error(`Replicate error (${res.status}): ${detail}`);
|
|
24
|
+
}
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
async function replicatePost(token, path, body) {
|
|
28
|
+
const res = await fetch(`${REPLICATE_API_BASE}${path}`, {
|
|
29
|
+
method: "POST",
|
|
30
|
+
headers: {
|
|
31
|
+
Authorization: `Bearer ${token}`,
|
|
32
|
+
"Content-Type": "application/json",
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify(body),
|
|
35
|
+
});
|
|
36
|
+
const data = await res.json();
|
|
37
|
+
if (!res.ok) {
|
|
38
|
+
const detail = data.detail ?? `HTTP ${res.status}`;
|
|
39
|
+
throw new Error(`Replicate error (${res.status}): ${detail}`);
|
|
40
|
+
}
|
|
41
|
+
return data;
|
|
42
|
+
}
|
|
43
|
+
// ─── Prediction normalizer ────────────────────────────────────────────────────
|
|
44
|
+
function normalizePrediction(p) {
|
|
45
|
+
return {
|
|
46
|
+
id: p.id,
|
|
47
|
+
version: p.version ?? null,
|
|
48
|
+
model: p.model ?? null,
|
|
49
|
+
status: p.status,
|
|
50
|
+
created_at: p.created_at,
|
|
51
|
+
started_at: p.started_at ?? null,
|
|
52
|
+
completed_at: p.completed_at ?? null,
|
|
53
|
+
input: p.input,
|
|
54
|
+
output: p.output ?? null,
|
|
55
|
+
error: p.error ?? null,
|
|
56
|
+
logs: p.logs ?? null,
|
|
57
|
+
predict_time_seconds: p.metrics?.predict_time ?? null,
|
|
58
|
+
get_url: p.urls.get,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// ─── Operations ───────────────────────────────────────────────────────────────
|
|
62
|
+
export async function replicateListModels(args) {
|
|
63
|
+
const token = requireToken(args);
|
|
64
|
+
const cursor = args.cursor ? `?cursor=${encodeURIComponent(String(args.cursor))}` : "";
|
|
65
|
+
const data = await replicateGet(token, `/models${cursor}`);
|
|
66
|
+
return {
|
|
67
|
+
count: data.results.length,
|
|
68
|
+
next_cursor: data.next ?? null,
|
|
69
|
+
models: data.results.map((m) => ({
|
|
70
|
+
owner: m.owner,
|
|
71
|
+
name: m.name,
|
|
72
|
+
description: m.description,
|
|
73
|
+
visibility: m.visibility,
|
|
74
|
+
url: m.url,
|
|
75
|
+
latest_version_id: m.latest_version?.id ?? null,
|
|
76
|
+
})),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export async function replicateGetModel(args) {
|
|
80
|
+
const token = requireToken(args);
|
|
81
|
+
const owner = String(args.owner ?? "").trim();
|
|
82
|
+
const name = String(args.model_name ?? "").trim();
|
|
83
|
+
if (!owner)
|
|
84
|
+
throw new Error("owner is required (the model owner's username).");
|
|
85
|
+
if (!name)
|
|
86
|
+
throw new Error("model_name is required.");
|
|
87
|
+
const model = await replicateGet(token, `/models/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);
|
|
88
|
+
return {
|
|
89
|
+
owner: model.owner,
|
|
90
|
+
name: model.name,
|
|
91
|
+
description: model.description,
|
|
92
|
+
visibility: model.visibility,
|
|
93
|
+
url: model.url,
|
|
94
|
+
github_url: model.github_url,
|
|
95
|
+
paper_url: model.paper_url,
|
|
96
|
+
license_url: model.license_url,
|
|
97
|
+
latest_version: model.latest_version ? {
|
|
98
|
+
id: model.latest_version.id,
|
|
99
|
+
created_at: model.latest_version.created_at,
|
|
100
|
+
} : null,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export async function replicateCreatePrediction(args) {
|
|
104
|
+
const token = requireToken(args);
|
|
105
|
+
let input;
|
|
106
|
+
if (typeof args.input === "string") {
|
|
107
|
+
try {
|
|
108
|
+
input = JSON.parse(args.input);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
throw new Error("input must be valid JSON (an object of model-specific parameters).");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else if (args.input && typeof args.input === "object") {
|
|
115
|
+
input = args.input;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
throw new Error("input is required (object of model-specific parameters).");
|
|
119
|
+
}
|
|
120
|
+
const body = { input };
|
|
121
|
+
const version = String(args.version ?? "").trim();
|
|
122
|
+
const model = String(args.model ?? "").trim();
|
|
123
|
+
if (version) {
|
|
124
|
+
body.version = version;
|
|
125
|
+
}
|
|
126
|
+
else if (model) {
|
|
127
|
+
// model format: owner/name or owner/name:version
|
|
128
|
+
body.model = model;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
throw new Error("Either version (version ID) or model (owner/name) is required.");
|
|
132
|
+
}
|
|
133
|
+
if (args.webhook)
|
|
134
|
+
body.webhook = String(args.webhook);
|
|
135
|
+
if (args.webhook_events_filter)
|
|
136
|
+
body.webhook_events_filter = args.webhook_events_filter;
|
|
137
|
+
if (args.stream === true)
|
|
138
|
+
body.stream = true;
|
|
139
|
+
const prediction = await replicatePost(token, "/predictions", body);
|
|
140
|
+
return normalizePrediction(prediction);
|
|
141
|
+
}
|
|
142
|
+
export async function replicateGetPrediction(args) {
|
|
143
|
+
const token = requireToken(args);
|
|
144
|
+
const predictionId = String(args.prediction_id ?? "").trim();
|
|
145
|
+
if (!predictionId)
|
|
146
|
+
throw new Error("prediction_id is required.");
|
|
147
|
+
const prediction = await replicateGet(token, `/predictions/${encodeURIComponent(predictionId)}`);
|
|
148
|
+
return normalizePrediction(prediction);
|
|
149
|
+
}
|
|
150
|
+
export async function replicateListPredictions(args) {
|
|
151
|
+
const token = requireToken(args);
|
|
152
|
+
const cursor = args.cursor ? `?cursor=${encodeURIComponent(String(args.cursor))}` : "";
|
|
153
|
+
const data = await replicateGet(token, `/predictions${cursor}`);
|
|
154
|
+
return {
|
|
155
|
+
count: data.results.length,
|
|
156
|
+
next_cursor: data.next ?? null,
|
|
157
|
+
predictions: data.results.map(normalizePrediction),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export async function replicateCancelPrediction(args) {
|
|
161
|
+
const token = requireToken(args);
|
|
162
|
+
const predictionId = String(args.prediction_id ?? "").trim();
|
|
163
|
+
if (!predictionId)
|
|
164
|
+
throw new Error("prediction_id is required.");
|
|
165
|
+
const prediction = await replicatePost(token, `/predictions/${encodeURIComponent(predictionId)}/cancel`, {});
|
|
166
|
+
return {
|
|
167
|
+
success: true,
|
|
168
|
+
prediction_id: prediction.id,
|
|
169
|
+
status: prediction.status,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=replicate-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replicate-tool.js","sourceRoot":"","sources":["../src/replicate-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function runway_generate_video(args: Record<string, unknown>): Promise<unknown>;
|
|
2
|
+
export declare function runway_get_task(args: Record<string, unknown>): Promise<unknown>;
|
|
3
|
+
export declare function runway_list_models(args: Record<string, unknown>): Promise<unknown>;
|
|
4
|
+
//# sourceMappingURL=runway-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runway-tool.d.ts","sourceRoot":"","sources":["../src/runway-tool.ts"],"names":[],"mappings":"AAsDA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAsC3F;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBrF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAYxF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// Runway ML API integration for the UnClick MCP server.
|
|
2
|
+
// Uses the Runway REST API via fetch - no external dependencies.
|
|
3
|
+
// Users must supply an API key from app.runwayml.com/account/api-keys.
|
|
4
|
+
const RW_API_BASE = "https://api.dev.runwayml.com/v1";
|
|
5
|
+
// ─── Auth validation ──────────────────────────────────────────────────────────
|
|
6
|
+
function requireKey(args) {
|
|
7
|
+
const key = String(args.api_key ?? "").trim();
|
|
8
|
+
if (!key)
|
|
9
|
+
throw new Error("api_key is required. Get one at app.runwayml.com/account/api-keys.");
|
|
10
|
+
return key;
|
|
11
|
+
}
|
|
12
|
+
// ─── API helpers ──────────────────────────────────────────────────────────────
|
|
13
|
+
async function rwGet(apiKey, path) {
|
|
14
|
+
const res = await fetch(`${RW_API_BASE}${path}`, {
|
|
15
|
+
headers: {
|
|
16
|
+
Authorization: `Bearer ${apiKey}`,
|
|
17
|
+
"Content-Type": "application/json",
|
|
18
|
+
"X-Runway-Version": "2024-11-06",
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
const data = await res.json();
|
|
22
|
+
if (!res.ok) {
|
|
23
|
+
const msg = data.message ?? data.error ?? `HTTP ${res.status}`;
|
|
24
|
+
throw new Error(`Runway error (${res.status}): ${msg}`);
|
|
25
|
+
}
|
|
26
|
+
return data;
|
|
27
|
+
}
|
|
28
|
+
async function rwPost(apiKey, path, body) {
|
|
29
|
+
const res = await fetch(`${RW_API_BASE}${path}`, {
|
|
30
|
+
method: "POST",
|
|
31
|
+
headers: {
|
|
32
|
+
Authorization: `Bearer ${apiKey}`,
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
"X-Runway-Version": "2024-11-06",
|
|
35
|
+
},
|
|
36
|
+
body: JSON.stringify(body),
|
|
37
|
+
});
|
|
38
|
+
const data = await res.json();
|
|
39
|
+
if (!res.ok) {
|
|
40
|
+
const msg = data.message ?? data.error ?? `HTTP ${res.status}`;
|
|
41
|
+
throw new Error(`Runway error (${res.status}): ${msg}`);
|
|
42
|
+
}
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
// ─── Operations ───────────────────────────────────────────────────────────────
|
|
46
|
+
export async function runway_generate_video(args) {
|
|
47
|
+
const apiKey = requireKey(args);
|
|
48
|
+
const promptText = String(args.prompt ?? "").trim();
|
|
49
|
+
const imageUrl = args.image_url ? String(args.image_url).trim() : undefined;
|
|
50
|
+
if (!promptText && !imageUrl) {
|
|
51
|
+
throw new Error("Either prompt (text description) or image_url is required.");
|
|
52
|
+
}
|
|
53
|
+
const model = String(args.model ?? "gen3a_turbo");
|
|
54
|
+
const duration = Number(args.duration ?? 5);
|
|
55
|
+
const ratio = String(args.ratio ?? "1280:768");
|
|
56
|
+
// Runway supports image_to_video (with promptImage) or text_to_video
|
|
57
|
+
const body = {
|
|
58
|
+
model,
|
|
59
|
+
ratio,
|
|
60
|
+
duration,
|
|
61
|
+
};
|
|
62
|
+
if (imageUrl) {
|
|
63
|
+
body.promptImage = imageUrl;
|
|
64
|
+
if (promptText)
|
|
65
|
+
body.promptText = promptText;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
body.promptText = promptText;
|
|
69
|
+
}
|
|
70
|
+
if (args.seed !== undefined)
|
|
71
|
+
body.seed = Number(args.seed);
|
|
72
|
+
const result = await rwPost(apiKey, "/image_to_video", body);
|
|
73
|
+
return {
|
|
74
|
+
task_id: result.id ?? null,
|
|
75
|
+
status: result.status ?? "submitted",
|
|
76
|
+
model,
|
|
77
|
+
note: "Use runway_get_task with the task_id to poll for completion.",
|
|
78
|
+
raw: result,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export async function runway_get_task(args) {
|
|
82
|
+
const apiKey = requireKey(args);
|
|
83
|
+
const taskId = String(args.task_id ?? "").trim();
|
|
84
|
+
if (!taskId)
|
|
85
|
+
throw new Error("task_id is required.");
|
|
86
|
+
const result = await rwGet(apiKey, `/tasks/${encodeURIComponent(taskId)}`);
|
|
87
|
+
const output = result.output;
|
|
88
|
+
return {
|
|
89
|
+
task_id: taskId,
|
|
90
|
+
status: result.status ?? null,
|
|
91
|
+
progress: result.progress ?? null,
|
|
92
|
+
video_url: Array.isArray(output) && output.length > 0 ? output[0] : null,
|
|
93
|
+
outputs: output ?? [],
|
|
94
|
+
failure: result.failure ?? null,
|
|
95
|
+
failure_code: result.failureCode ?? null,
|
|
96
|
+
created_at: result.createdAt ?? null,
|
|
97
|
+
raw: result,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export async function runway_list_models(args) {
|
|
101
|
+
const apiKey = requireKey(args);
|
|
102
|
+
const data = await rwGet(apiKey, "/models");
|
|
103
|
+
const models = data.data ?? data.models ?? [];
|
|
104
|
+
return {
|
|
105
|
+
count: Array.isArray(models) ? models.length : 0,
|
|
106
|
+
models,
|
|
107
|
+
note: "Common models: gen3a_turbo (fast), gen3a (quality). Use model name in runway_generate_video.",
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=runway-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runway-tool.js","sourceRoot":"","sources":["../src/runway-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function segment_track_event(args: Record<string, unknown>): Promise<unknown>;
|
|
2
|
+
export declare function segment_identify_user(args: Record<string, unknown>): Promise<unknown>;
|
|
3
|
+
export declare function segment_list_sources(args: Record<string, unknown>): Promise<unknown>;
|
|
4
|
+
export declare function segment_list_destinations(args: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
export declare function segment_get_source(args: Record<string, unknown>): Promise<unknown>;
|
|
6
|
+
//# sourceMappingURL=segment-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-tool.d.ts","sourceRoot":"","sources":["../src/segment-tool.ts"],"names":[],"mappings":"AA8DA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBzF;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB3F;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAU1F;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAU/F;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CASxF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// Segment Customer Data Platform API.
|
|
2
|
+
// Docs: https://segment.com/docs/connections/sources/catalog/libraries/server/http-api/
|
|
3
|
+
// https://docs.segmentapis.com/
|
|
4
|
+
// Auth: write_key (Basic auth, base64 encoded) for tracking; api_token (Bearer) for management
|
|
5
|
+
// Base: https://api.segment.io/v1 (tracking) / https://api.segmentapis.com (management)
|
|
6
|
+
const SEGMENT_TRACK_BASE = "https://api.segment.io/v1";
|
|
7
|
+
const SEGMENT_MGMT_BASE = "https://api.segmentapis.com";
|
|
8
|
+
function requireWriteKey(args) {
|
|
9
|
+
const key = String(args.write_key ?? args.api_key ?? "").trim();
|
|
10
|
+
if (!key)
|
|
11
|
+
throw new Error("write_key is required. Get one from your Segment source settings.");
|
|
12
|
+
return key;
|
|
13
|
+
}
|
|
14
|
+
function requireApiToken(args) {
|
|
15
|
+
const token = String(args.api_token ?? args.api_key ?? "").trim();
|
|
16
|
+
if (!token)
|
|
17
|
+
throw new Error("api_token is required. Get one from app.segment.com/goto-my-workspace/settings/access-management.");
|
|
18
|
+
return token;
|
|
19
|
+
}
|
|
20
|
+
async function segmentTrackPost(writeKey, path, body) {
|
|
21
|
+
const encoded = Buffer.from(`${writeKey}:`).toString("base64");
|
|
22
|
+
const res = await fetch(`${SEGMENT_TRACK_BASE}${path}`, {
|
|
23
|
+
method: "POST",
|
|
24
|
+
headers: {
|
|
25
|
+
Authorization: `Basic ${encoded}`,
|
|
26
|
+
"Content-Type": "application/json",
|
|
27
|
+
},
|
|
28
|
+
body: JSON.stringify(body),
|
|
29
|
+
});
|
|
30
|
+
if (!res.ok) {
|
|
31
|
+
const text = await res.text().catch(() => "");
|
|
32
|
+
throw new Error(`Segment tracking error (${res.status}): ${text || res.statusText}`);
|
|
33
|
+
}
|
|
34
|
+
return res.json();
|
|
35
|
+
}
|
|
36
|
+
async function segmentMgmtGet(apiToken, path, query) {
|
|
37
|
+
const url = new URL(`${SEGMENT_MGMT_BASE}${path}`);
|
|
38
|
+
if (query) {
|
|
39
|
+
for (const [k, v] of Object.entries(query)) {
|
|
40
|
+
if (v !== undefined && v !== "")
|
|
41
|
+
url.searchParams.set(k, v);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const res = await fetch(url.toString(), {
|
|
45
|
+
headers: {
|
|
46
|
+
Authorization: `Bearer ${apiToken}`,
|
|
47
|
+
"Content-Type": "application/json",
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
const data = await res.json();
|
|
51
|
+
if (!res.ok) {
|
|
52
|
+
const err = data.errors?.[0];
|
|
53
|
+
const msg = err?.message ?? `HTTP ${res.status}`;
|
|
54
|
+
throw new Error(`Segment management error (${res.status}): ${msg}`);
|
|
55
|
+
}
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
// ─── Operations ───────────────────────────────────────────────────────────────
|
|
59
|
+
export async function segment_track_event(args) {
|
|
60
|
+
const writeKey = requireWriteKey(args);
|
|
61
|
+
const event = String(args.event ?? "").trim();
|
|
62
|
+
const userId = String(args.user_id ?? "").trim();
|
|
63
|
+
const anonymousId = String(args.anonymous_id ?? "").trim();
|
|
64
|
+
if (!event)
|
|
65
|
+
throw new Error("event is required.");
|
|
66
|
+
if (!userId && !anonymousId)
|
|
67
|
+
throw new Error("user_id or anonymous_id is required.");
|
|
68
|
+
const body = {
|
|
69
|
+
event,
|
|
70
|
+
timestamp: args.timestamp ?? new Date().toISOString(),
|
|
71
|
+
};
|
|
72
|
+
if (userId)
|
|
73
|
+
body.userId = userId;
|
|
74
|
+
if (anonymousId)
|
|
75
|
+
body.anonymousId = anonymousId;
|
|
76
|
+
if (args.properties && typeof args.properties === "object")
|
|
77
|
+
body.properties = args.properties;
|
|
78
|
+
if (args.context && typeof args.context === "object")
|
|
79
|
+
body.context = args.context;
|
|
80
|
+
const data = await segmentTrackPost(writeKey, "/track", body);
|
|
81
|
+
return { success: true, raw: data };
|
|
82
|
+
}
|
|
83
|
+
export async function segment_identify_user(args) {
|
|
84
|
+
const writeKey = requireWriteKey(args);
|
|
85
|
+
const userId = String(args.user_id ?? "").trim();
|
|
86
|
+
const anonymousId = String(args.anonymous_id ?? "").trim();
|
|
87
|
+
if (!userId && !anonymousId)
|
|
88
|
+
throw new Error("user_id or anonymous_id is required.");
|
|
89
|
+
const body = {
|
|
90
|
+
timestamp: args.timestamp ?? new Date().toISOString(),
|
|
91
|
+
};
|
|
92
|
+
if (userId)
|
|
93
|
+
body.userId = userId;
|
|
94
|
+
if (anonymousId)
|
|
95
|
+
body.anonymousId = anonymousId;
|
|
96
|
+
if (args.traits && typeof args.traits === "object")
|
|
97
|
+
body.traits = args.traits;
|
|
98
|
+
if (args.context && typeof args.context === "object")
|
|
99
|
+
body.context = args.context;
|
|
100
|
+
const data = await segmentTrackPost(writeKey, "/identify", body);
|
|
101
|
+
return { success: true, raw: data };
|
|
102
|
+
}
|
|
103
|
+
export async function segment_list_sources(args) {
|
|
104
|
+
const apiToken = requireApiToken(args);
|
|
105
|
+
const workspaceId = String(args.workspace_id ?? "").trim();
|
|
106
|
+
if (!workspaceId)
|
|
107
|
+
throw new Error("workspace_id is required.");
|
|
108
|
+
const data = await segmentMgmtGet(apiToken, `/workspaces/${workspaceId}/sources`);
|
|
109
|
+
const sources = data.data?.sources ?? [];
|
|
110
|
+
return { count: sources.length, sources };
|
|
111
|
+
}
|
|
112
|
+
export async function segment_list_destinations(args) {
|
|
113
|
+
const apiToken = requireApiToken(args);
|
|
114
|
+
const sourceId = String(args.source_id ?? "").trim();
|
|
115
|
+
if (!sourceId)
|
|
116
|
+
throw new Error("source_id is required.");
|
|
117
|
+
const data = await segmentMgmtGet(apiToken, `/sources/${sourceId}/destinations`);
|
|
118
|
+
const destinations = data.data?.destinations ?? [];
|
|
119
|
+
return { count: destinations.length, destinations };
|
|
120
|
+
}
|
|
121
|
+
export async function segment_get_source(args) {
|
|
122
|
+
const apiToken = requireApiToken(args);
|
|
123
|
+
const sourceId = String(args.source_id ?? "").trim();
|
|
124
|
+
if (!sourceId)
|
|
125
|
+
throw new Error("source_id is required.");
|
|
126
|
+
const data = await segmentMgmtGet(apiToken, `/sources/${sourceId}`);
|
|
127
|
+
return data.data?.source ?? data;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=segment-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-tool.js","sourceRoot":"","sources":["../src/segment-tool.ts"],"names":[],"mappings":"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"}
|