@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,188 @@
|
|
|
1
|
+
// LINE Messaging API integration for the UnClick MCP server.
|
|
2
|
+
// Uses the official LINE Messaging API via fetch - no external dependencies.
|
|
3
|
+
// Users must create a LINE channel and obtain a Channel Access Token.
|
|
4
|
+
const LINE_API_BASE = "https://api.line.me/v2/bot";
|
|
5
|
+
// ─── API helper ───────────────────────────────────────────────────────────────
|
|
6
|
+
async function linePost(token, path, body) {
|
|
7
|
+
const res = await fetch(`${LINE_API_BASE}${path}`, {
|
|
8
|
+
method: "POST",
|
|
9
|
+
headers: {
|
|
10
|
+
Authorization: `Bearer ${token}`,
|
|
11
|
+
"Content-Type": "application/json",
|
|
12
|
+
},
|
|
13
|
+
body: JSON.stringify(body),
|
|
14
|
+
});
|
|
15
|
+
// LINE returns 200 for success; error bodies have message field
|
|
16
|
+
const text = await res.text();
|
|
17
|
+
let data = {};
|
|
18
|
+
try {
|
|
19
|
+
data = JSON.parse(text);
|
|
20
|
+
}
|
|
21
|
+
catch { /* empty response is fine for 200 */ }
|
|
22
|
+
if (!res.ok) {
|
|
23
|
+
const msg = data.message ?? `HTTP ${res.status}`;
|
|
24
|
+
const detail = data.details
|
|
25
|
+
?.map((d) => d.message)
|
|
26
|
+
.join("; ");
|
|
27
|
+
throw new Error(`LINE API error: ${msg}${detail ? ` — ${detail}` : ""}`);
|
|
28
|
+
}
|
|
29
|
+
return data;
|
|
30
|
+
}
|
|
31
|
+
async function lineGet(token, path) {
|
|
32
|
+
const res = await fetch(`${LINE_API_BASE}${path}`, {
|
|
33
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
34
|
+
});
|
|
35
|
+
const text = await res.text();
|
|
36
|
+
let data = {};
|
|
37
|
+
try {
|
|
38
|
+
data = JSON.parse(text);
|
|
39
|
+
}
|
|
40
|
+
catch { /* empty */ }
|
|
41
|
+
if (!res.ok) {
|
|
42
|
+
const msg = data.message ?? `HTTP ${res.status}`;
|
|
43
|
+
throw new Error(`LINE API error: ${msg}`);
|
|
44
|
+
}
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
// ─── Token validation ─────────────────────────────────────────────────────────
|
|
48
|
+
function requireToken(token) {
|
|
49
|
+
const t = String(token ?? "").trim();
|
|
50
|
+
if (!t)
|
|
51
|
+
throw new Error("channel_access_token is required. Create a LINE channel at developers.line.biz.");
|
|
52
|
+
return t;
|
|
53
|
+
}
|
|
54
|
+
// ─── Operations ───────────────────────────────────────────────────────────────
|
|
55
|
+
export async function lineSendMessage(args) {
|
|
56
|
+
const token = requireToken(args.channel_access_token);
|
|
57
|
+
const to = String(args.to ?? "").trim();
|
|
58
|
+
if (!to)
|
|
59
|
+
throw new Error("to is required (user ID, group ID, or room ID).");
|
|
60
|
+
const message = String(args.message ?? "").trim();
|
|
61
|
+
if (!message)
|
|
62
|
+
throw new Error("message is required.");
|
|
63
|
+
const result = await linePost(token, "/message/push", {
|
|
64
|
+
to,
|
|
65
|
+
messages: [{ type: "text", text: message }],
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
to,
|
|
70
|
+
message,
|
|
71
|
+
sentMessages: result.sentMessages ?? [],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export async function lineSendFlexMessage(args) {
|
|
75
|
+
const token = requireToken(args.channel_access_token);
|
|
76
|
+
const to = String(args.to ?? "").trim();
|
|
77
|
+
if (!to)
|
|
78
|
+
throw new Error("to is required.");
|
|
79
|
+
const altText = String(args.alt_text ?? "").trim();
|
|
80
|
+
if (!altText)
|
|
81
|
+
throw new Error("alt_text is required (fallback text for notifications).");
|
|
82
|
+
let contents;
|
|
83
|
+
if (typeof args.contents === "string") {
|
|
84
|
+
try {
|
|
85
|
+
contents = JSON.parse(args.contents);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
throw new Error("contents must be valid JSON (a Flex Message container object).");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else if (args.contents && typeof args.contents === "object") {
|
|
92
|
+
contents = args.contents;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw new Error("contents is required (Flex Message container as JSON object or string).");
|
|
96
|
+
}
|
|
97
|
+
const result = await linePost(token, "/message/push", {
|
|
98
|
+
to,
|
|
99
|
+
messages: [{ type: "flex", altText, contents }],
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
success: true,
|
|
103
|
+
to,
|
|
104
|
+
alt_text: altText,
|
|
105
|
+
sentMessages: result.sentMessages ?? [],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export async function lineGetProfile(args) {
|
|
109
|
+
const token = requireToken(args.channel_access_token);
|
|
110
|
+
const userId = String(args.user_id ?? "").trim();
|
|
111
|
+
if (!userId)
|
|
112
|
+
throw new Error("user_id is required.");
|
|
113
|
+
const profile = await lineGet(token, `/profile/${encodeURIComponent(userId)}`);
|
|
114
|
+
return {
|
|
115
|
+
user_id: profile.userId,
|
|
116
|
+
display_name: profile.displayName,
|
|
117
|
+
picture_url: profile.pictureUrl ?? null,
|
|
118
|
+
status_message: profile.statusMessage ?? null,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export async function lineGetGroupSummary(args) {
|
|
122
|
+
const token = requireToken(args.channel_access_token);
|
|
123
|
+
const groupId = String(args.group_id ?? "").trim();
|
|
124
|
+
if (!groupId)
|
|
125
|
+
throw new Error("group_id is required.");
|
|
126
|
+
const summary = await lineGet(token, `/group/${encodeURIComponent(groupId)}/summary`);
|
|
127
|
+
return {
|
|
128
|
+
group_id: summary.groupId,
|
|
129
|
+
group_name: summary.groupName,
|
|
130
|
+
picture_url: summary.pictureUrl ?? null,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export async function lineReplyMessage(args) {
|
|
134
|
+
const token = requireToken(args.channel_access_token);
|
|
135
|
+
const replyToken = String(args.reply_token ?? "").trim();
|
|
136
|
+
if (!replyToken)
|
|
137
|
+
throw new Error("reply_token is required (obtained from a webhook event).");
|
|
138
|
+
// messages can be a JSON string array or array of message objects
|
|
139
|
+
let messages;
|
|
140
|
+
if (Array.isArray(args.messages)) {
|
|
141
|
+
messages = args.messages;
|
|
142
|
+
}
|
|
143
|
+
else if (typeof args.messages === "string") {
|
|
144
|
+
try {
|
|
145
|
+
messages = JSON.parse(args.messages);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
throw new Error("messages must be a JSON array of message objects.");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (args.message) {
|
|
152
|
+
// Convenience: single text message via 'message' param
|
|
153
|
+
messages = [{ type: "text", text: String(args.message) }];
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
throw new Error("messages is required (array of LINE message objects, max 5).");
|
|
157
|
+
}
|
|
158
|
+
if (!Array.isArray(messages) || messages.length === 0) {
|
|
159
|
+
throw new Error("messages must be a non-empty array.");
|
|
160
|
+
}
|
|
161
|
+
if (messages.length > 5)
|
|
162
|
+
throw new Error("LINE reply allows a maximum of 5 messages.");
|
|
163
|
+
const result = await linePost(token, "/message/reply", {
|
|
164
|
+
replyToken,
|
|
165
|
+
messages,
|
|
166
|
+
});
|
|
167
|
+
return {
|
|
168
|
+
success: true,
|
|
169
|
+
reply_token: replyToken,
|
|
170
|
+
message_count: messages.length,
|
|
171
|
+
sentMessages: result.sentMessages ?? [],
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
export async function lineBroadcast(args) {
|
|
175
|
+
const token = requireToken(args.channel_access_token);
|
|
176
|
+
const message = String(args.message ?? "").trim();
|
|
177
|
+
if (!message)
|
|
178
|
+
throw new Error("message is required.");
|
|
179
|
+
await linePost(token, "/message/broadcast", {
|
|
180
|
+
messages: [{ type: "text", text: message }],
|
|
181
|
+
});
|
|
182
|
+
return {
|
|
183
|
+
success: true,
|
|
184
|
+
message,
|
|
185
|
+
note: "Broadcast sent to all users who have followed your LINE Official Account.",
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=line-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-tool.js","sourceRoot":"","sources":["../src/line-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-tool.d.ts","sourceRoot":"","sources":["../src/linear-tool.ts"],"names":[],"mappings":"AA4KA,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAmBlB"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// ── Linear GraphQL API tool ────────────────────────────────────────────────
|
|
2
|
+
// Wraps the Linear GraphQL API (https://api.linear.app/graphql) via fetch.
|
|
3
|
+
// Auth: API key passed as api_key.
|
|
4
|
+
// No external dependencies.
|
|
5
|
+
const LINEAR_API = "https://api.linear.app/graphql";
|
|
6
|
+
// ── GraphQL helper ─────────────────────────────────────────────────────────────
|
|
7
|
+
async function linearQuery(apiKey, query, variables) {
|
|
8
|
+
let response;
|
|
9
|
+
try {
|
|
10
|
+
response = await fetch(LINEAR_API, {
|
|
11
|
+
method: "POST",
|
|
12
|
+
headers: {
|
|
13
|
+
Authorization: apiKey,
|
|
14
|
+
"Content-Type": "application/json",
|
|
15
|
+
"User-Agent": "UnClick-MCP/1.0",
|
|
16
|
+
},
|
|
17
|
+
body: JSON.stringify({ query, variables }),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return { error: `Network error reaching Linear API: ${err instanceof Error ? err.message : String(err)}` };
|
|
22
|
+
}
|
|
23
|
+
const text = await response.text();
|
|
24
|
+
let data;
|
|
25
|
+
try {
|
|
26
|
+
data = JSON.parse(text);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return { error: `Invalid JSON from Linear: ${text}` };
|
|
30
|
+
}
|
|
31
|
+
if (response.status === 401)
|
|
32
|
+
return { error: "Linear API key is invalid. Check your api_key.", status: 401 };
|
|
33
|
+
if (response.status === 429)
|
|
34
|
+
return { error: "Linear rate limit exceeded. Please wait and retry.", status: 429 };
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
return { error: `Linear API error ${response.status}: ${text}`, status: response.status };
|
|
37
|
+
}
|
|
38
|
+
if (data.errors) {
|
|
39
|
+
const errs = data.errors.map((e) => e.message).join("; ");
|
|
40
|
+
return { error: `Linear GraphQL error: ${errs}` };
|
|
41
|
+
}
|
|
42
|
+
return data.data;
|
|
43
|
+
}
|
|
44
|
+
// ── Action implementations ─────────────────────────────────────────────────────
|
|
45
|
+
async function listIssues(apiKey, args) {
|
|
46
|
+
const first = args.first ? Number(args.first) : 25;
|
|
47
|
+
const teamId = args.team_id ? String(args.team_id) : undefined;
|
|
48
|
+
const stateId = args.state_id ? String(args.state_id) : undefined;
|
|
49
|
+
const filter = {};
|
|
50
|
+
if (teamId)
|
|
51
|
+
filter.team = { id: { eq: teamId } };
|
|
52
|
+
if (stateId)
|
|
53
|
+
filter.state = { id: { eq: stateId } };
|
|
54
|
+
const hasFilter = Object.keys(filter).length > 0;
|
|
55
|
+
return linearQuery(apiKey, `
|
|
56
|
+
query ListIssues($first: Int, $filter: IssueFilter) {
|
|
57
|
+
issues(first: $first, filter: $filter) {
|
|
58
|
+
nodes {
|
|
59
|
+
id
|
|
60
|
+
identifier
|
|
61
|
+
title
|
|
62
|
+
description
|
|
63
|
+
priority
|
|
64
|
+
state { name }
|
|
65
|
+
assignee { name email }
|
|
66
|
+
team { name }
|
|
67
|
+
createdAt
|
|
68
|
+
updatedAt
|
|
69
|
+
url
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
`, { first, filter: hasFilter ? filter : undefined });
|
|
74
|
+
}
|
|
75
|
+
async function createIssue(apiKey, args) {
|
|
76
|
+
const title = String(args.title ?? "").trim();
|
|
77
|
+
const teamId = String(args.team_id ?? "").trim();
|
|
78
|
+
if (!title)
|
|
79
|
+
return { error: "title is required." };
|
|
80
|
+
if (!teamId)
|
|
81
|
+
return { error: "team_id is required." };
|
|
82
|
+
const input = { title, teamId };
|
|
83
|
+
if (args.description)
|
|
84
|
+
input.description = String(args.description);
|
|
85
|
+
if (args.priority)
|
|
86
|
+
input.priority = Number(args.priority);
|
|
87
|
+
if (args.assignee_id)
|
|
88
|
+
input.assigneeId = String(args.assignee_id);
|
|
89
|
+
if (args.state_id)
|
|
90
|
+
input.stateId = String(args.state_id);
|
|
91
|
+
return linearQuery(apiKey, `
|
|
92
|
+
mutation CreateIssue($input: IssueCreateInput!) {
|
|
93
|
+
issueCreate(input: $input) {
|
|
94
|
+
success
|
|
95
|
+
issue {
|
|
96
|
+
id
|
|
97
|
+
identifier
|
|
98
|
+
title
|
|
99
|
+
url
|
|
100
|
+
state { name }
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
`, { input });
|
|
105
|
+
}
|
|
106
|
+
async function getProject(apiKey, args) {
|
|
107
|
+
const id = String(args.project_id ?? "").trim();
|
|
108
|
+
if (!id)
|
|
109
|
+
return { error: "project_id is required." };
|
|
110
|
+
return linearQuery(apiKey, `
|
|
111
|
+
query GetProject($id: String!) {
|
|
112
|
+
project(id: $id) {
|
|
113
|
+
id
|
|
114
|
+
name
|
|
115
|
+
description
|
|
116
|
+
state
|
|
117
|
+
progress
|
|
118
|
+
startDate
|
|
119
|
+
targetDate
|
|
120
|
+
url
|
|
121
|
+
teams { nodes { id name } }
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
`, { id });
|
|
125
|
+
}
|
|
126
|
+
async function listTeams(apiKey) {
|
|
127
|
+
return linearQuery(apiKey, `
|
|
128
|
+
query ListTeams {
|
|
129
|
+
teams {
|
|
130
|
+
nodes {
|
|
131
|
+
id
|
|
132
|
+
name
|
|
133
|
+
description
|
|
134
|
+
key
|
|
135
|
+
timezone
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
`);
|
|
140
|
+
}
|
|
141
|
+
async function searchIssues(apiKey, args) {
|
|
142
|
+
const term = String(args.query ?? "").trim();
|
|
143
|
+
const first = args.first ? Number(args.first) : 25;
|
|
144
|
+
if (!term)
|
|
145
|
+
return { error: "query is required." };
|
|
146
|
+
return linearQuery(apiKey, `
|
|
147
|
+
query SearchIssues($term: String!, $first: Int) {
|
|
148
|
+
issueSearch(term: $term, first: $first) {
|
|
149
|
+
nodes {
|
|
150
|
+
id
|
|
151
|
+
identifier
|
|
152
|
+
title
|
|
153
|
+
description
|
|
154
|
+
priority
|
|
155
|
+
state { name }
|
|
156
|
+
assignee { name }
|
|
157
|
+
team { name }
|
|
158
|
+
url
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
`, { term, first });
|
|
163
|
+
}
|
|
164
|
+
// ── Public dispatcher ──────────────────────────────────────────────────────────
|
|
165
|
+
export async function linearAction(action, args) {
|
|
166
|
+
const apiKey = String(args.api_key ?? "").trim();
|
|
167
|
+
if (!apiKey)
|
|
168
|
+
return { error: "api_key is required." };
|
|
169
|
+
try {
|
|
170
|
+
switch (action) {
|
|
171
|
+
case "list_issues": return listIssues(apiKey, args);
|
|
172
|
+
case "create_issue": return createIssue(apiKey, args);
|
|
173
|
+
case "get_project": return getProject(apiKey, args);
|
|
174
|
+
case "list_teams": return listTeams(apiKey);
|
|
175
|
+
case "search_issues": return searchIssues(apiKey, args);
|
|
176
|
+
default:
|
|
177
|
+
return {
|
|
178
|
+
error: `Unknown Linear action: "${action}". Valid actions: list_issues, create_issue, get_project, list_teams, search_issues.`,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=linear-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-tool.js","sourceRoot":"","sources":["../src/linear-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function listMondayBoards(args: Record<string, unknown>): Promise<unknown>;
|
|
2
|
+
export declare function getMondayBoard(args: Record<string, unknown>): Promise<unknown>;
|
|
3
|
+
export declare function listMondayItems(args: Record<string, unknown>): Promise<unknown>;
|
|
4
|
+
export declare function createMondayItem(args: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
export declare function updateMondayItem(args: Record<string, unknown>): Promise<unknown>;
|
|
6
|
+
export declare function searchMondayItems(args: Record<string, unknown>): Promise<unknown>;
|
|
7
|
+
//# sourceMappingURL=monday-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monday-tool.d.ts","sourceRoot":"","sources":["../src/monday-tool.ts"],"names":[],"mappings":"AA0CA,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBtF;AAGD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBpF;AAGD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA2BrF;AAGD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BtF;AAGD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BtF;AAGD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBvF"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// Monday.com project management API.
|
|
2
|
+
// Docs: https://developer.monday.com/api-reference/docs
|
|
3
|
+
// Auth: MONDAY_API_KEY (Bearer token)
|
|
4
|
+
// Base: https://api.monday.com/v2 (GraphQL)
|
|
5
|
+
const MONDAY_BASE = "https://api.monday.com/v2";
|
|
6
|
+
function getApiKey(args) {
|
|
7
|
+
const key = String(args.api_key ?? process.env.MONDAY_API_KEY ?? "").trim();
|
|
8
|
+
if (!key)
|
|
9
|
+
throw new Error("api_key is required (or set MONDAY_API_KEY env var).");
|
|
10
|
+
return key;
|
|
11
|
+
}
|
|
12
|
+
async function mondayQuery(apiKey, query, variables) {
|
|
13
|
+
const res = await fetch(MONDAY_BASE, {
|
|
14
|
+
method: "POST",
|
|
15
|
+
headers: {
|
|
16
|
+
Authorization: `Bearer ${apiKey}`,
|
|
17
|
+
"Content-Type": "application/json",
|
|
18
|
+
"API-Version": "2024-01",
|
|
19
|
+
},
|
|
20
|
+
body: JSON.stringify({ query, variables }),
|
|
21
|
+
});
|
|
22
|
+
if (res.status === 401)
|
|
23
|
+
throw new Error("Invalid Monday.com API key.");
|
|
24
|
+
if (res.status === 429)
|
|
25
|
+
throw new Error("Monday.com rate limit exceeded.");
|
|
26
|
+
if (!res.ok) {
|
|
27
|
+
const body = await res.text().catch(() => "");
|
|
28
|
+
throw new Error(`Monday.com HTTP ${res.status}: ${body || res.statusText}`);
|
|
29
|
+
}
|
|
30
|
+
const json = await res.json();
|
|
31
|
+
if (json.errors) {
|
|
32
|
+
const msgs = json.errors.map((e) => e.message).join("; ");
|
|
33
|
+
throw new Error(`Monday.com GraphQL error: ${msgs}`);
|
|
34
|
+
}
|
|
35
|
+
return json.data;
|
|
36
|
+
}
|
|
37
|
+
// list_monday_boards
|
|
38
|
+
export async function listMondayBoards(args) {
|
|
39
|
+
try {
|
|
40
|
+
const apiKey = getApiKey(args);
|
|
41
|
+
const limit = Number(args.limit ?? 25);
|
|
42
|
+
const query = `
|
|
43
|
+
query($limit: Int) {
|
|
44
|
+
boards(limit: $limit) {
|
|
45
|
+
id name description state board_kind
|
|
46
|
+
columns { id title type }
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
const data = await mondayQuery(apiKey, query, { limit });
|
|
51
|
+
const boards = (data.boards ?? []);
|
|
52
|
+
return { count: boards.length, boards };
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// get_monday_board
|
|
59
|
+
export async function getMondayBoard(args) {
|
|
60
|
+
try {
|
|
61
|
+
const apiKey = getApiKey(args);
|
|
62
|
+
const boardId = String(args.board_id ?? "").trim();
|
|
63
|
+
if (!boardId)
|
|
64
|
+
return { error: "board_id is required." };
|
|
65
|
+
const query = `
|
|
66
|
+
query($ids: [ID!]) {
|
|
67
|
+
boards(ids: $ids) {
|
|
68
|
+
id name description state board_kind
|
|
69
|
+
columns { id title type }
|
|
70
|
+
groups { id title color }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
`;
|
|
74
|
+
const data = await mondayQuery(apiKey, query, { ids: [boardId] });
|
|
75
|
+
const boards = (data.boards ?? []);
|
|
76
|
+
return boards[0] ?? { error: "Board not found." };
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// list_monday_items
|
|
83
|
+
export async function listMondayItems(args) {
|
|
84
|
+
try {
|
|
85
|
+
const apiKey = getApiKey(args);
|
|
86
|
+
const boardId = String(args.board_id ?? "").trim();
|
|
87
|
+
if (!boardId)
|
|
88
|
+
return { error: "board_id is required." };
|
|
89
|
+
const limit = Number(args.limit ?? 50);
|
|
90
|
+
const query = `
|
|
91
|
+
query($ids: [ID!], $limit: Int) {
|
|
92
|
+
boards(ids: $ids) {
|
|
93
|
+
items_page(limit: $limit) {
|
|
94
|
+
items {
|
|
95
|
+
id name state created_at updated_at
|
|
96
|
+
column_values { id text value }
|
|
97
|
+
group { id title }
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
`;
|
|
103
|
+
const data = await mondayQuery(apiKey, query, { ids: [boardId], limit });
|
|
104
|
+
const boards = (data.boards ?? []);
|
|
105
|
+
const board = boards[0];
|
|
106
|
+
const items = (board?.items_page?.items ?? []);
|
|
107
|
+
return { count: items.length, items };
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// create_monday_item
|
|
114
|
+
export async function createMondayItem(args) {
|
|
115
|
+
try {
|
|
116
|
+
const apiKey = getApiKey(args);
|
|
117
|
+
const boardId = String(args.board_id ?? "").trim();
|
|
118
|
+
if (!boardId)
|
|
119
|
+
return { error: "board_id is required." };
|
|
120
|
+
const itemName = String(args.item_name ?? "").trim();
|
|
121
|
+
if (!itemName)
|
|
122
|
+
return { error: "item_name is required." };
|
|
123
|
+
const mutation = `
|
|
124
|
+
mutation($board_id: ID!, $item_name: String!, $group_id: String, $column_values: JSON) {
|
|
125
|
+
create_item(board_id: $board_id, item_name: $item_name, group_id: $group_id, column_values: $column_values) {
|
|
126
|
+
id name state created_at
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
`;
|
|
130
|
+
const variables = { board_id: boardId, item_name: itemName };
|
|
131
|
+
if (args.group_id)
|
|
132
|
+
variables.group_id = String(args.group_id);
|
|
133
|
+
if (args.column_values)
|
|
134
|
+
variables.column_values = typeof args.column_values === "string"
|
|
135
|
+
? args.column_values
|
|
136
|
+
: JSON.stringify(args.column_values);
|
|
137
|
+
const data = await mondayQuery(apiKey, mutation, variables);
|
|
138
|
+
return data.create_item;
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// update_monday_item
|
|
145
|
+
export async function updateMondayItem(args) {
|
|
146
|
+
try {
|
|
147
|
+
const apiKey = getApiKey(args);
|
|
148
|
+
const boardId = String(args.board_id ?? "").trim();
|
|
149
|
+
if (!boardId)
|
|
150
|
+
return { error: "board_id is required." };
|
|
151
|
+
const itemId = String(args.item_id ?? "").trim();
|
|
152
|
+
if (!itemId)
|
|
153
|
+
return { error: "item_id is required." };
|
|
154
|
+
const columnId = String(args.column_id ?? "").trim();
|
|
155
|
+
if (!columnId)
|
|
156
|
+
return { error: "column_id is required." };
|
|
157
|
+
const value = args.value;
|
|
158
|
+
if (value === undefined)
|
|
159
|
+
return { error: "value is required." };
|
|
160
|
+
const mutation = `
|
|
161
|
+
mutation($board_id: ID!, $item_id: ID!, $column_id: String!, $value: JSON!) {
|
|
162
|
+
change_column_value(board_id: $board_id, item_id: $item_id, column_id: $column_id, value: $value) {
|
|
163
|
+
id name
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
`;
|
|
167
|
+
const data = await mondayQuery(apiKey, mutation, {
|
|
168
|
+
board_id: boardId,
|
|
169
|
+
item_id: itemId,
|
|
170
|
+
column_id: columnId,
|
|
171
|
+
value: typeof value === "string" ? value : JSON.stringify(value),
|
|
172
|
+
});
|
|
173
|
+
return data.change_column_value;
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// search_monday_items
|
|
180
|
+
export async function searchMondayItems(args) {
|
|
181
|
+
try {
|
|
182
|
+
const apiKey = getApiKey(args);
|
|
183
|
+
const boardId = String(args.board_id ?? "").trim();
|
|
184
|
+
if (!boardId)
|
|
185
|
+
return { error: "board_id is required." };
|
|
186
|
+
const query_text = String(args.query ?? "").trim();
|
|
187
|
+
if (!query_text)
|
|
188
|
+
return { error: "query is required." };
|
|
189
|
+
const limit = Number(args.limit ?? 25);
|
|
190
|
+
const query = `
|
|
191
|
+
query($board_id: ID!, $query: String!, $limit: Int) {
|
|
192
|
+
items_by_multiple_column_values(board_id: $board_id, limit: $limit, column_id: "name", column_values: [$query]) {
|
|
193
|
+
id name state created_at updated_at
|
|
194
|
+
column_values { id text value }
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
`;
|
|
198
|
+
const data = await mondayQuery(apiKey, query, { board_id: boardId, query: query_text, limit });
|
|
199
|
+
const items = (data.items_by_multiple_column_values ?? []);
|
|
200
|
+
return { count: items.length, items };
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=monday-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monday-tool.js","sourceRoot":"","sources":["../src/monday-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function openaiChatCompletion(args: Record<string, unknown>): Promise<unknown>;
|
|
2
|
+
export declare function openaiCreateEmbedding(args: Record<string, unknown>): Promise<unknown>;
|
|
3
|
+
export declare function openaiGenerateImage(args: Record<string, unknown>): Promise<unknown>;
|
|
4
|
+
export declare function openaiCreateTranscription(args: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
export declare function openaiListModels(args: Record<string, unknown>): Promise<unknown>;
|
|
6
|
+
//# sourceMappingURL=openai-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-tool.d.ts","sourceRoot":"","sources":["../src/openai-tool.ts"],"names":[],"mappings":"AA0GA,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8C1F;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA2B3F;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBzF;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAkD/F;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBtF"}
|