@unclick/mcp-server 0.2.3 → 0.2.4
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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/toilets-tool.js +2 -2
- package/dist/tool-wiring.d.ts +4066 -18
- package/dist/tool-wiring.d.ts.map +1 -1
- package/dist/tool-wiring.js +2601 -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/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/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,139 @@
|
|
|
1
|
+
// ExchangeRate-API currency conversion and rates.
|
|
2
|
+
// Docs: https://www.exchangerate-api.com/docs/overview
|
|
3
|
+
// Auth: EXCHANGERATE_API_KEY (embedded in URL path)
|
|
4
|
+
// Base: https://v6.exchangerate-api.com/v6/{api_key}
|
|
5
|
+
// Free tier (no key): https://open.er-api.com/v6 (latest rates only)
|
|
6
|
+
const EXCHANGERATE_BASE = "https://v6.exchangerate-api.com/v6";
|
|
7
|
+
const EXCHANGERATE_FREE_BASE = "https://open.er-api.com/v6";
|
|
8
|
+
function getApiKey(args) {
|
|
9
|
+
return String(args.api_key ?? process.env.EXCHANGERATE_API_KEY ?? "").trim() || null;
|
|
10
|
+
}
|
|
11
|
+
async function erGet(path) {
|
|
12
|
+
const res = await fetch(path, {
|
|
13
|
+
headers: { Accept: "application/json" },
|
|
14
|
+
});
|
|
15
|
+
if (res.status === 403)
|
|
16
|
+
throw new Error("Invalid ExchangeRate-API key.");
|
|
17
|
+
if (res.status === 404)
|
|
18
|
+
throw new Error("ExchangeRate-API: resource not found. Check your base currency code.");
|
|
19
|
+
if (res.status === 429)
|
|
20
|
+
throw new Error("ExchangeRate-API rate limit exceeded. Upgrade your plan or wait.");
|
|
21
|
+
if (!res.ok) {
|
|
22
|
+
const body = await res.text().catch(() => "");
|
|
23
|
+
throw new Error(`ExchangeRate-API HTTP ${res.status}: ${body || res.statusText}`);
|
|
24
|
+
}
|
|
25
|
+
const json = await res.json();
|
|
26
|
+
if (json.result === "error") {
|
|
27
|
+
throw new Error(`ExchangeRate-API error: ${json["error-type"] ?? "unknown error"}`);
|
|
28
|
+
}
|
|
29
|
+
return json;
|
|
30
|
+
}
|
|
31
|
+
// exchangerate_latest
|
|
32
|
+
export async function exchangerateLatest(args) {
|
|
33
|
+
try {
|
|
34
|
+
const apiKey = getApiKey(args);
|
|
35
|
+
const base = String(args.base ?? "USD").toUpperCase();
|
|
36
|
+
const url = apiKey
|
|
37
|
+
? `${EXCHANGERATE_BASE}/${apiKey}/latest/${base}`
|
|
38
|
+
: `${EXCHANGERATE_FREE_BASE}/latest/${base}`;
|
|
39
|
+
const json = await erGet(url);
|
|
40
|
+
return {
|
|
41
|
+
base_code: json.base_code,
|
|
42
|
+
time_last_update_utc: json.time_last_update_utc,
|
|
43
|
+
time_next_update_utc: json.time_next_update_utc,
|
|
44
|
+
rates: json.conversion_rates,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// exchangerate_convert
|
|
52
|
+
export async function exchangerateConvert(args) {
|
|
53
|
+
try {
|
|
54
|
+
const apiKey = getApiKey(args);
|
|
55
|
+
const from = String(args.from ?? "").toUpperCase().trim();
|
|
56
|
+
if (!from)
|
|
57
|
+
return { error: "from is required (e.g. USD)." };
|
|
58
|
+
const to = String(args.to ?? "").toUpperCase().trim();
|
|
59
|
+
if (!to)
|
|
60
|
+
return { error: "to is required (e.g. EUR)." };
|
|
61
|
+
const amount = Number(args.amount ?? 1);
|
|
62
|
+
if (apiKey) {
|
|
63
|
+
const url = `${EXCHANGERATE_BASE}/${apiKey}/pair/${from}/${to}/${amount}`;
|
|
64
|
+
const json = await erGet(url);
|
|
65
|
+
return {
|
|
66
|
+
base_code: json.base_code,
|
|
67
|
+
target_code: json.target_code,
|
|
68
|
+
conversion_rate: json.conversion_rate,
|
|
69
|
+
conversion_result: json.conversion_result,
|
|
70
|
+
time_last_update_utc: json.time_last_update_utc,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Free tier: fetch latest from base and compute
|
|
75
|
+
const url = `${EXCHANGERATE_FREE_BASE}/latest/${from}`;
|
|
76
|
+
const json = await erGet(url);
|
|
77
|
+
const rates = json.conversion_rates;
|
|
78
|
+
const rate = rates?.[to];
|
|
79
|
+
if (rate === undefined)
|
|
80
|
+
return { error: `Currency code "${to}" not found.` };
|
|
81
|
+
return {
|
|
82
|
+
base_code: from,
|
|
83
|
+
target_code: to,
|
|
84
|
+
conversion_rate: rate,
|
|
85
|
+
conversion_result: amount * rate,
|
|
86
|
+
input_amount: amount,
|
|
87
|
+
time_last_update_utc: json.time_last_update_utc,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// exchangerate_historical
|
|
96
|
+
export async function exchangerateHistorical(args) {
|
|
97
|
+
try {
|
|
98
|
+
const apiKey = getApiKey(args);
|
|
99
|
+
if (!apiKey)
|
|
100
|
+
return { error: "api_key is required for historical rates (not available on free tier)." };
|
|
101
|
+
const base = String(args.base ?? "USD").toUpperCase();
|
|
102
|
+
const year = String(args.year ?? "").trim();
|
|
103
|
+
const month = String(args.month ?? "").trim();
|
|
104
|
+
const day = String(args.day ?? "").trim();
|
|
105
|
+
if (!year || !month || !day)
|
|
106
|
+
return { error: "year, month, and day are required." };
|
|
107
|
+
const url = `${EXCHANGERATE_BASE}/${apiKey}/history/${base}/${year}/${month}/${day}`;
|
|
108
|
+
const json = await erGet(url);
|
|
109
|
+
return {
|
|
110
|
+
base_code: json.base_code,
|
|
111
|
+
year: json.year,
|
|
112
|
+
month: json.month,
|
|
113
|
+
day: json.day,
|
|
114
|
+
rates: json.conversion_rates,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// exchangerate_codes
|
|
122
|
+
export async function exchangerateCodes(args) {
|
|
123
|
+
try {
|
|
124
|
+
const apiKey = getApiKey(args);
|
|
125
|
+
if (!apiKey)
|
|
126
|
+
return { error: "api_key is required to list supported currencies." };
|
|
127
|
+
const url = `${EXCHANGERATE_BASE}/${apiKey}/codes`;
|
|
128
|
+
const json = await erGet(url);
|
|
129
|
+
const supported = (json.supported_codes ?? []);
|
|
130
|
+
return {
|
|
131
|
+
count: supported.length,
|
|
132
|
+
currencies: supported.map(([code, name]) => ({ code, name })),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=exchangerate-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchangerate-tool.js","sourceRoot":"","sources":["../src/exchangerate-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function figmaGetFile(args: Record<string, unknown>): Promise<unknown>;
|
|
2
|
+
export declare function figmaGetNode(args: Record<string, unknown>): Promise<unknown>;
|
|
3
|
+
export declare function figmaGetImages(args: Record<string, unknown>): Promise<unknown>;
|
|
4
|
+
export declare function figmaGetComments(args: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
export declare function figmaPostComment(args: Record<string, unknown>): Promise<unknown>;
|
|
6
|
+
export declare function figmaGetComponents(args: Record<string, unknown>): Promise<unknown>;
|
|
7
|
+
export declare function figmaGetTeamProjects(args: Record<string, unknown>): Promise<unknown>;
|
|
8
|
+
//# sourceMappingURL=figma-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-tool.d.ts","sourceRoot":"","sources":["../src/figma-tool.ts"],"names":[],"mappings":"AAmHA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BlF;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuClF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CpF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBtF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BtF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBxF;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoB1F"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// Figma REST API integration for the UnClick MCP server.
|
|
2
|
+
// Uses the official Figma API v1 via fetch - no external dependencies.
|
|
3
|
+
// Users must generate a Personal Access Token in Figma account settings.
|
|
4
|
+
const FIGMA_API_BASE = "https://api.figma.com/v1";
|
|
5
|
+
// ─── API helper ───────────────────────────────────────────────────────────────
|
|
6
|
+
async function figmaGet(token, path, params) {
|
|
7
|
+
let url = `${FIGMA_API_BASE}${path}`;
|
|
8
|
+
if (params && Object.keys(params).length > 0) {
|
|
9
|
+
const qs = new URLSearchParams(params);
|
|
10
|
+
url += `?${qs}`;
|
|
11
|
+
}
|
|
12
|
+
const res = await fetch(url, {
|
|
13
|
+
headers: { "X-Figma-Token": token },
|
|
14
|
+
});
|
|
15
|
+
const data = (await res.json());
|
|
16
|
+
if (!res.ok) {
|
|
17
|
+
const msg = data.err ?? data.message ?? `HTTP ${res.status}`;
|
|
18
|
+
const status = data.status ?? res.status;
|
|
19
|
+
throw new Error(`Figma API error (${status}): ${msg}`);
|
|
20
|
+
}
|
|
21
|
+
return data;
|
|
22
|
+
}
|
|
23
|
+
async function figmaPost(token, path, body) {
|
|
24
|
+
const res = await fetch(`${FIGMA_API_BASE}${path}`, {
|
|
25
|
+
method: "POST",
|
|
26
|
+
headers: {
|
|
27
|
+
"X-Figma-Token": token,
|
|
28
|
+
"Content-Type": "application/json",
|
|
29
|
+
},
|
|
30
|
+
body: JSON.stringify(body),
|
|
31
|
+
});
|
|
32
|
+
const data = (await res.json());
|
|
33
|
+
if (!res.ok) {
|
|
34
|
+
const msg = data.err ?? data.message ?? `HTTP ${res.status}`;
|
|
35
|
+
const status = data.status ?? res.status;
|
|
36
|
+
throw new Error(`Figma API error (${status}): ${msg}`);
|
|
37
|
+
}
|
|
38
|
+
return data;
|
|
39
|
+
}
|
|
40
|
+
// ─── Token validation ─────────────────────────────────────────────────────────
|
|
41
|
+
function requireToken(token) {
|
|
42
|
+
const t = String(token ?? "").trim();
|
|
43
|
+
if (!t)
|
|
44
|
+
throw new Error("personal_access_token is required. Generate one at figma.com → Account Settings → Personal access tokens.");
|
|
45
|
+
return t;
|
|
46
|
+
}
|
|
47
|
+
function requireFileKey(fileKey) {
|
|
48
|
+
const k = String(fileKey ?? "").trim();
|
|
49
|
+
if (!k)
|
|
50
|
+
throw new Error("file_key is required (the alphanumeric ID from the Figma file URL).");
|
|
51
|
+
return k;
|
|
52
|
+
}
|
|
53
|
+
// ─── Operations ───────────────────────────────────────────────────────────────
|
|
54
|
+
export async function figmaGetFile(args) {
|
|
55
|
+
const token = requireToken(args.personal_access_token);
|
|
56
|
+
const fileKey = requireFileKey(args.file_key);
|
|
57
|
+
const params = {};
|
|
58
|
+
if (args.depth !== undefined)
|
|
59
|
+
params.depth = String(args.depth);
|
|
60
|
+
const file = await figmaGet(token, `/files/${fileKey}`, params);
|
|
61
|
+
// Summarize pages (top-level children of document)
|
|
62
|
+
const pages = (file.document.children ?? []).map((page) => ({
|
|
63
|
+
id: page.id,
|
|
64
|
+
name: page.name,
|
|
65
|
+
type: page.type,
|
|
66
|
+
frame_count: (page.children ?? []).filter((n) => n.type === "FRAME" || n.type === "COMPONENT").length,
|
|
67
|
+
}));
|
|
68
|
+
const componentCount = Object.keys(file.components ?? {}).length;
|
|
69
|
+
return {
|
|
70
|
+
name: file.name,
|
|
71
|
+
file_key: fileKey,
|
|
72
|
+
last_modified: file.lastModified,
|
|
73
|
+
version: file.version,
|
|
74
|
+
thumbnail_url: file.thumbnailUrl ?? null,
|
|
75
|
+
editor_type: file.editorType,
|
|
76
|
+
page_count: pages.length,
|
|
77
|
+
pages,
|
|
78
|
+
component_count: componentCount,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export async function figmaGetNode(args) {
|
|
82
|
+
const token = requireToken(args.personal_access_token);
|
|
83
|
+
const fileKey = requireFileKey(args.file_key);
|
|
84
|
+
const nodeId = String(args.node_id ?? "").trim();
|
|
85
|
+
if (!nodeId)
|
|
86
|
+
throw new Error("node_id is required.");
|
|
87
|
+
// The /files/:key/nodes endpoint accepts comma-separated node IDs
|
|
88
|
+
const data = await figmaGet(token, `/files/${fileKey}/nodes`, { ids: nodeId });
|
|
89
|
+
const nodeData = data.nodes?.[nodeId];
|
|
90
|
+
if (!nodeData) {
|
|
91
|
+
throw new Error(`Node "${nodeId}" not found in file "${fileKey}".`);
|
|
92
|
+
}
|
|
93
|
+
const node = nodeData.document;
|
|
94
|
+
function summarizeNode(n, depth = 0) {
|
|
95
|
+
const summary = {
|
|
96
|
+
id: n.id,
|
|
97
|
+
name: n.name,
|
|
98
|
+
type: n.type,
|
|
99
|
+
};
|
|
100
|
+
if (n.children && depth < 2) {
|
|
101
|
+
summary.children = n.children.map((c) => summarizeNode(c, depth + 1));
|
|
102
|
+
}
|
|
103
|
+
else if (n.children) {
|
|
104
|
+
summary.child_count = n.children.length;
|
|
105
|
+
}
|
|
106
|
+
return summary;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
file_key: fileKey,
|
|
110
|
+
node: summarizeNode(node),
|
|
111
|
+
component_count: Object.keys(nodeData.components ?? {}).length,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export async function figmaGetImages(args) {
|
|
115
|
+
const token = requireToken(args.personal_access_token);
|
|
116
|
+
const fileKey = requireFileKey(args.file_key);
|
|
117
|
+
// node_ids can be a comma-separated string or an array
|
|
118
|
+
let nodeIds;
|
|
119
|
+
if (Array.isArray(args.node_ids)) {
|
|
120
|
+
nodeIds = args.node_ids.join(",");
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
nodeIds = String(args.node_ids ?? "").trim();
|
|
124
|
+
}
|
|
125
|
+
if (!nodeIds)
|
|
126
|
+
throw new Error("node_ids is required (comma-separated list of node IDs to render).");
|
|
127
|
+
const format = String(args.format ?? "png").toLowerCase();
|
|
128
|
+
const validFormats = ["png", "jpg", "svg", "pdf"];
|
|
129
|
+
if (!validFormats.includes(format)) {
|
|
130
|
+
throw new Error(`Invalid format "${format}". Valid formats: ${validFormats.join(", ")}.`);
|
|
131
|
+
}
|
|
132
|
+
const params = { ids: nodeIds, format };
|
|
133
|
+
const scale = Number(args.scale ?? 1);
|
|
134
|
+
if (format !== "svg" && format !== "pdf") {
|
|
135
|
+
const clampedScale = Math.min(4, Math.max(0.01, scale));
|
|
136
|
+
params.scale = String(clampedScale);
|
|
137
|
+
}
|
|
138
|
+
const result = await figmaGet(token, `/images/${fileKey}`, params);
|
|
139
|
+
if (result.err) {
|
|
140
|
+
throw new Error(`Figma image render error: ${result.err}`);
|
|
141
|
+
}
|
|
142
|
+
const images = Object.entries(result.images ?? {}).map(([id, url]) => ({
|
|
143
|
+
node_id: id,
|
|
144
|
+
url: url ?? null,
|
|
145
|
+
rendered: url !== null,
|
|
146
|
+
}));
|
|
147
|
+
return {
|
|
148
|
+
file_key: fileKey,
|
|
149
|
+
format,
|
|
150
|
+
scale: params.scale ?? null,
|
|
151
|
+
count: images.length,
|
|
152
|
+
images,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
export async function figmaGetComments(args) {
|
|
156
|
+
const token = requireToken(args.personal_access_token);
|
|
157
|
+
const fileKey = requireFileKey(args.file_key);
|
|
158
|
+
const data = await figmaGet(token, `/files/${fileKey}/comments`);
|
|
159
|
+
const comments = (data.comments ?? []).map((c) => ({
|
|
160
|
+
id: c.id,
|
|
161
|
+
message: c.message,
|
|
162
|
+
author: c.user?.handle ?? null,
|
|
163
|
+
created_at: c.created_at,
|
|
164
|
+
resolved: c.resolved_at !== null,
|
|
165
|
+
resolved_at: c.resolved_at ?? null,
|
|
166
|
+
position: c.client_meta
|
|
167
|
+
? { x: c.client_meta.x ?? null, y: c.client_meta.y ?? null, node_id: c.client_meta.node_id ?? null }
|
|
168
|
+
: null,
|
|
169
|
+
}));
|
|
170
|
+
return {
|
|
171
|
+
file_key: fileKey,
|
|
172
|
+
count: comments.length,
|
|
173
|
+
comments,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
export async function figmaPostComment(args) {
|
|
177
|
+
const token = requireToken(args.personal_access_token);
|
|
178
|
+
const fileKey = requireFileKey(args.file_key);
|
|
179
|
+
const message = String(args.message ?? "").trim();
|
|
180
|
+
if (!message)
|
|
181
|
+
throw new Error("message is required.");
|
|
182
|
+
const body = { message };
|
|
183
|
+
// Optional canvas coordinates for pinning the comment to a location
|
|
184
|
+
const x = args.x !== undefined ? Number(args.x) : undefined;
|
|
185
|
+
const y = args.y !== undefined ? Number(args.y) : undefined;
|
|
186
|
+
if (x !== undefined && y !== undefined) {
|
|
187
|
+
body.client_meta = { x, y };
|
|
188
|
+
}
|
|
189
|
+
const data = await figmaPost(token, `/files/${fileKey}/comments`, body);
|
|
190
|
+
return {
|
|
191
|
+
success: true,
|
|
192
|
+
file_key: fileKey,
|
|
193
|
+
comment_id: data.id,
|
|
194
|
+
message: data.message,
|
|
195
|
+
created_at: data.created_at,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
export async function figmaGetComponents(args) {
|
|
199
|
+
const token = requireToken(args.personal_access_token);
|
|
200
|
+
const fileKey = requireFileKey(args.file_key);
|
|
201
|
+
// /files/:key returns components in the top-level `components` map
|
|
202
|
+
const file = await figmaGet(token, `/files/${fileKey}`, { depth: "1" });
|
|
203
|
+
const components = Object.entries(file.components ?? {}).map(([nodeId, comp]) => ({
|
|
204
|
+
node_id: nodeId,
|
|
205
|
+
key: comp.key,
|
|
206
|
+
name: comp.name,
|
|
207
|
+
description: comp.description ?? null,
|
|
208
|
+
}));
|
|
209
|
+
return {
|
|
210
|
+
file_key: fileKey,
|
|
211
|
+
count: components.length,
|
|
212
|
+
components,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
export async function figmaGetTeamProjects(args) {
|
|
216
|
+
const token = requireToken(args.personal_access_token);
|
|
217
|
+
const teamId = String(args.team_id ?? "").trim();
|
|
218
|
+
if (!teamId)
|
|
219
|
+
throw new Error("team_id is required (found in your Figma team URL).");
|
|
220
|
+
const data = await figmaGet(token, `/teams/${encodeURIComponent(teamId)}/projects`);
|
|
221
|
+
const projects = (data.projects ?? []).map((p) => ({
|
|
222
|
+
id: p.id,
|
|
223
|
+
name: p.name,
|
|
224
|
+
}));
|
|
225
|
+
return {
|
|
226
|
+
team_id: teamId,
|
|
227
|
+
count: projects.length,
|
|
228
|
+
projects,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=figma-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-tool.js","sourceRoot":"","sources":["../src/figma-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function gdeltNewsSearch(args: Record<string, unknown>): Promise<unknown>;
|
|
2
|
+
export declare function gdeltToneAnalysis(args: Record<string, unknown>): Promise<unknown>;
|
|
3
|
+
export declare function gdeltGeoEvents(args: Record<string, unknown>): Promise<unknown>;
|
|
4
|
+
export declare function gdeltTrending(args: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
//# sourceMappingURL=gdelt-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gdelt-tool.d.ts","sourceRoot":"","sources":["../src/gdelt-tool.ts"],"names":[],"mappings":"AAsDA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAiCrF;AAMD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAkDvF;AAKD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BpF;AAMD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA+CnF"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
// GDELT Project integration — global news intelligence, no auth required.
|
|
2
|
+
// Docs: https://www.gdeltproject.org/
|
|
3
|
+
// DOC API: https://api.gdeltproject.org/api/v2/doc/doc
|
|
4
|
+
// GEO API: https://api.gdeltproject.org/api/v2/geo/geo
|
|
5
|
+
// Updated every 15 minutes. Covers all broadcast, print, and web news globally.
|
|
6
|
+
const GDELT_DOC = "https://api.gdeltproject.org/api/v2/doc/doc";
|
|
7
|
+
const GDELT_GEO = "https://api.gdeltproject.org/api/v2/geo/geo";
|
|
8
|
+
// ─── API helpers ──────────────────────────────────────────────────────────────
|
|
9
|
+
async function gdeltFetch(base, params) {
|
|
10
|
+
const url = `${base}?${params}`;
|
|
11
|
+
const res = await fetch(url, {
|
|
12
|
+
headers: { "User-Agent": "UnClickMCP/1.0 (https://unclick.io)" },
|
|
13
|
+
});
|
|
14
|
+
if (!res.ok)
|
|
15
|
+
throw new Error(`GDELT API HTTP ${res.status}`);
|
|
16
|
+
return res.json();
|
|
17
|
+
}
|
|
18
|
+
// ─── gdelt_news_search ────────────────────────────────────────────────────────
|
|
19
|
+
export async function gdeltNewsSearch(args) {
|
|
20
|
+
const query = String(args.query ?? "").trim();
|
|
21
|
+
if (!query)
|
|
22
|
+
return { error: "query is required." };
|
|
23
|
+
const maxrecords = Math.min(250, Math.max(1, Number(args.maxrecords ?? 25)));
|
|
24
|
+
const params = new URLSearchParams({
|
|
25
|
+
query,
|
|
26
|
+
mode: "artlist",
|
|
27
|
+
format: "json",
|
|
28
|
+
maxrecords: String(maxrecords),
|
|
29
|
+
});
|
|
30
|
+
if (args.startdatetime)
|
|
31
|
+
params.set("startdatetime", String(args.startdatetime));
|
|
32
|
+
if (args.enddatetime)
|
|
33
|
+
params.set("enddatetime", String(args.enddatetime));
|
|
34
|
+
if (args.sourcelang)
|
|
35
|
+
params.set("sourcelang", String(args.sourcelang));
|
|
36
|
+
if (args.sourcecountry)
|
|
37
|
+
params.set("sourcecountry", String(args.sourcecountry));
|
|
38
|
+
const data = await gdeltFetch(GDELT_DOC, params);
|
|
39
|
+
const articles = data?.articles ?? [];
|
|
40
|
+
return {
|
|
41
|
+
query,
|
|
42
|
+
count: articles.length,
|
|
43
|
+
articles: articles.map((a) => ({
|
|
44
|
+
title: a.title ?? null,
|
|
45
|
+
url: a.url ?? null,
|
|
46
|
+
domain: a.domain ?? null,
|
|
47
|
+
date: a.seendate ?? null,
|
|
48
|
+
language: a.language ?? null,
|
|
49
|
+
country: a.sourcecountry ?? null,
|
|
50
|
+
image: a.socialimage ?? null,
|
|
51
|
+
})),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// ─── gdelt_tone_analysis ──────────────────────────────────────────────────────
|
|
55
|
+
// Uses timelinetone mode — returns average tone score over time.
|
|
56
|
+
// Negative values = negative sentiment; positive = positive sentiment.
|
|
57
|
+
export async function gdeltToneAnalysis(args) {
|
|
58
|
+
const query = String(args.query ?? "").trim();
|
|
59
|
+
if (!query)
|
|
60
|
+
return { error: "query is required." };
|
|
61
|
+
const params = new URLSearchParams({
|
|
62
|
+
query,
|
|
63
|
+
mode: "timelinetone",
|
|
64
|
+
format: "json",
|
|
65
|
+
});
|
|
66
|
+
if (args.timespan)
|
|
67
|
+
params.set("timespan", String(args.timespan));
|
|
68
|
+
if (args.sourcelang)
|
|
69
|
+
params.set("sourcelang", String(args.sourcelang));
|
|
70
|
+
if (args.sourcecountry)
|
|
71
|
+
params.set("sourcecountry", String(args.sourcecountry));
|
|
72
|
+
const data = await gdeltFetch(GDELT_DOC, params);
|
|
73
|
+
const timelineArr = data?.timeline ?? [];
|
|
74
|
+
const entries = timelineArr.flatMap((t) => t?.data ?? []);
|
|
75
|
+
if (entries.length === 0) {
|
|
76
|
+
return { query, timeline: [], summary: null };
|
|
77
|
+
}
|
|
78
|
+
const values = entries.map((e) => e.value ?? 0).filter((v) => !isNaN(v));
|
|
79
|
+
const avg = values.length > 0 ? values.reduce((a, b) => a + b, 0) / values.length : 0;
|
|
80
|
+
const min = Math.min(...values);
|
|
81
|
+
const max = Math.max(...values);
|
|
82
|
+
const latest = entries[entries.length - 1];
|
|
83
|
+
return {
|
|
84
|
+
query,
|
|
85
|
+
summary: {
|
|
86
|
+
average_tone: Math.round(avg * 100) / 100,
|
|
87
|
+
min_tone: Math.round(min * 100) / 100,
|
|
88
|
+
max_tone: Math.round(max * 100) / 100,
|
|
89
|
+
latest_tone: Math.round((latest?.value ?? 0) * 100) / 100,
|
|
90
|
+
latest_date: latest?.date ?? null,
|
|
91
|
+
interpretation: avg < -2 ? "strongly negative" :
|
|
92
|
+
avg < -0.5 ? "slightly negative" :
|
|
93
|
+
avg < 0.5 ? "neutral" :
|
|
94
|
+
avg < 2 ? "slightly positive" : "strongly positive",
|
|
95
|
+
},
|
|
96
|
+
timeline: entries.slice(-30).map((e) => ({
|
|
97
|
+
date: e.date ?? null,
|
|
98
|
+
tone: Math.round((e.value ?? 0) * 100) / 100,
|
|
99
|
+
})),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// ─── gdelt_geo_events ─────────────────────────────────────────────────────────
|
|
103
|
+
// Uses the GDELT GEO API — returns geographic event clusters with article counts and tone.
|
|
104
|
+
export async function gdeltGeoEvents(args) {
|
|
105
|
+
const query = String(args.query ?? "").trim();
|
|
106
|
+
if (!query)
|
|
107
|
+
return { error: "query is required." };
|
|
108
|
+
const maxpoints = Math.min(250, Math.max(1, Number(args.maxpoints ?? 50)));
|
|
109
|
+
const params = new URLSearchParams({
|
|
110
|
+
query,
|
|
111
|
+
format: "json",
|
|
112
|
+
maxpoints: String(maxpoints),
|
|
113
|
+
});
|
|
114
|
+
if (args.timespan)
|
|
115
|
+
params.set("timespan", String(args.timespan));
|
|
116
|
+
const data = await gdeltFetch(GDELT_GEO, params);
|
|
117
|
+
const features = data?.features ?? [];
|
|
118
|
+
return {
|
|
119
|
+
query,
|
|
120
|
+
count: features.length,
|
|
121
|
+
events: features.map((f) => ({
|
|
122
|
+
name: f.properties?.name ?? null,
|
|
123
|
+
country: f.properties?.countrycode ?? null,
|
|
124
|
+
coordinates: f.geometry?.coordinates
|
|
125
|
+
? { lat: f.geometry.coordinates[1], lng: f.geometry.coordinates[0] }
|
|
126
|
+
: null,
|
|
127
|
+
article_count: f.properties?.count ?? 0,
|
|
128
|
+
tone: f.properties?.tone != null
|
|
129
|
+
? Math.round(f.properties.tone * 100) / 100
|
|
130
|
+
: null,
|
|
131
|
+
})).sort((a, b) => (b.article_count ?? 0) - (a.article_count ?? 0)),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// ─── gdelt_trending ───────────────────────────────────────────────────────────
|
|
135
|
+
// Uses timelinevol mode — returns article volume over time for a query.
|
|
136
|
+
// Shows whether a topic is surging, stable, or fading in the news cycle.
|
|
137
|
+
export async function gdeltTrending(args) {
|
|
138
|
+
const query = String(args.query ?? "").trim();
|
|
139
|
+
if (!query)
|
|
140
|
+
return { error: "query is required." };
|
|
141
|
+
const params = new URLSearchParams({
|
|
142
|
+
query,
|
|
143
|
+
mode: "timelinevol",
|
|
144
|
+
format: "json",
|
|
145
|
+
});
|
|
146
|
+
if (args.timespan)
|
|
147
|
+
params.set("timespan", String(args.timespan));
|
|
148
|
+
if (args.sourcelang)
|
|
149
|
+
params.set("sourcelang", String(args.sourcelang));
|
|
150
|
+
const data = await gdeltFetch(GDELT_DOC, params);
|
|
151
|
+
const timelineArr = data?.timeline ?? [];
|
|
152
|
+
const entries = timelineArr.flatMap((t) => t?.data ?? []);
|
|
153
|
+
if (entries.length === 0) {
|
|
154
|
+
return { query, trend: "no data", timeline: [] };
|
|
155
|
+
}
|
|
156
|
+
const values = entries.map((e) => e.normvalue ?? e.value ?? 0);
|
|
157
|
+
const recent = values.slice(-5);
|
|
158
|
+
const older = values.slice(0, Math.max(1, values.length - 5));
|
|
159
|
+
const recentAvg = recent.reduce((a, b) => a + b, 0) / recent.length;
|
|
160
|
+
const olderAvg = older.reduce((a, b) => a + b, 0) / older.length;
|
|
161
|
+
const trend = olderAvg === 0 ? "emerging" :
|
|
162
|
+
recentAvg > olderAvg * 1.5 ? "surging" :
|
|
163
|
+
recentAvg > olderAvg * 1.1 ? "rising" :
|
|
164
|
+
recentAvg < olderAvg * 0.5 ? "fading" :
|
|
165
|
+
recentAvg < olderAvg * 0.9 ? "declining" : "stable";
|
|
166
|
+
return {
|
|
167
|
+
query,
|
|
168
|
+
trend,
|
|
169
|
+
recent_avg_volume: Math.round(recentAvg * 1000) / 1000,
|
|
170
|
+
older_avg_volume: Math.round(olderAvg * 1000) / 1000,
|
|
171
|
+
timeline: entries.map((e) => ({
|
|
172
|
+
date: e.date ?? null,
|
|
173
|
+
volume: Math.round((e.normvalue ?? e.value ?? 0) * 1000) / 1000,
|
|
174
|
+
})),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=gdelt-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gdelt-tool.js","sourceRoot":"","sources":["../src/gdelt-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-tool.d.ts","sourceRoot":"","sources":["../src/github-tool.ts"],"names":[],"mappings":"AAiJA,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAqBlB"}
|