@ancientwhispers54/leafengines-mcp-server 2.0.6 → 2.0.7
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/dist/index.js +74 -12
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -28,28 +28,50 @@ const axios_1 = __importDefault(require("axios"));
|
|
|
28
28
|
// MCP Server implementation
|
|
29
29
|
const server = new index_js_1.Server({
|
|
30
30
|
name: "leafengines",
|
|
31
|
-
version: "
|
|
31
|
+
version: "2.0.7",
|
|
32
32
|
}, {
|
|
33
33
|
capabilities: {
|
|
34
34
|
tools: {},
|
|
35
35
|
},
|
|
36
36
|
});
|
|
37
|
-
//
|
|
38
|
-
const
|
|
37
|
+
// Telemetry ingestion (anonymous, opt-out available via NO_ANALYTICS=1)
|
|
38
|
+
const TELEMETRY_INGEST_ENDPOINT = "https://wzgnxkoeqzvueypwzvyn.supabase.co/functions/v1/telemetry-ingest";
|
|
39
|
+
const TELEMETRY_ANALYTICS_ENDPOINT = "https://wzgnxkoeqzvueypwzvyn.supabase.co/functions/v1/analytics";
|
|
39
40
|
const ENABLE_ANALYTICS = process.env.NO_ANALYTICS !== "1";
|
|
40
|
-
//
|
|
41
|
+
// Send telemetry event to the new ingestion pipeline (includes downstream digest emails)
|
|
42
|
+
async function sendTelemetryEvent(event) {
|
|
43
|
+
if (!ENABLE_ANALYTICS)
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
await axios_1.default.post(TELEMETRY_INGEST_ENDPOINT, {
|
|
47
|
+
...event,
|
|
48
|
+
surface: event.surface ?? "mcp",
|
|
49
|
+
event_type: event.event_type ?? "tool_call",
|
|
50
|
+
}, {
|
|
51
|
+
timeout: 1000, // Don't block on telemetry
|
|
52
|
+
headers: {
|
|
53
|
+
"x-surface": event.surface ?? "mcp",
|
|
54
|
+
"x-client-version": "2.0.7",
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// Silently fail - telemetry should not affect functionality
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Legacy analytics tracking (kept as fallback for backward compat, may be dead endpoint)
|
|
41
63
|
async function trackToolUsage(toolName) {
|
|
42
64
|
if (!ENABLE_ANALYTICS)
|
|
43
65
|
return;
|
|
44
66
|
try {
|
|
45
|
-
await axios_1.default.post(
|
|
67
|
+
await axios_1.default.post(TELEMETRY_ANALYTICS_ENDPOINT, {
|
|
46
68
|
event: "tool_used",
|
|
47
69
|
tool: toolName,
|
|
48
|
-
version: "
|
|
70
|
+
version: "2.0.7",
|
|
49
71
|
timestamp: new Date().toISOString(),
|
|
50
|
-
anonymous_id: `mcp_${Date.now()}_${Math.random().toString(36).
|
|
72
|
+
anonymous_id: `mcp_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`,
|
|
51
73
|
}, {
|
|
52
|
-
timeout: 1000 // Don't block on analytics
|
|
74
|
+
timeout: 1000, // Don't block on analytics
|
|
53
75
|
});
|
|
54
76
|
}
|
|
55
77
|
catch (error) {
|
|
@@ -58,7 +80,7 @@ async function trackToolUsage(toolName) {
|
|
|
58
80
|
}
|
|
59
81
|
// Community engagement message (shown on first run)
|
|
60
82
|
function getCommunityMessage() {
|
|
61
|
-
return `🌱 Welcome to LeafEngines MCP Server (
|
|
83
|
+
return `🌱 Welcome to LeafEngines MCP Server (v2.0.7)!
|
|
62
84
|
|
|
63
85
|
Join 750+ developers in our community:
|
|
64
86
|
• GitHub Discussions: https://github.com/QWarranto/leafengines-claude-mcp/discussions
|
|
@@ -179,9 +201,19 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
179
201
|
trackToolUsage(name);
|
|
180
202
|
// Get API key from environment variable
|
|
181
203
|
const apiKey = process.env.LEAFENGINES_API_KEY;
|
|
182
|
-
// Free tools: county_lookup and get_soil_data available without API key
|
|
183
204
|
const freeTools = ['county_lookup', 'get_soil_data'];
|
|
205
|
+
// Free tools: county_lookup and get_soil_data available without API key
|
|
184
206
|
if (!apiKey && !freeTools.includes(name)) {
|
|
207
|
+
// Telemetry the paywall hit
|
|
208
|
+
sendTelemetryEvent({
|
|
209
|
+
surface: "mcp",
|
|
210
|
+
event_type: "tool_call",
|
|
211
|
+
tool_name: `${name}:paywall`,
|
|
212
|
+
status_code: 402,
|
|
213
|
+
api_key_prefix: apiKey ? apiKey.slice(0, 8) : null,
|
|
214
|
+
metadata: { tier: "paywall", free_tools_available: freeTools },
|
|
215
|
+
});
|
|
216
|
+
trackToolUsage(`${name}:paywall`);
|
|
185
217
|
return {
|
|
186
218
|
content: [
|
|
187
219
|
{
|
|
@@ -193,9 +225,25 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
193
225
|
};
|
|
194
226
|
}
|
|
195
227
|
try {
|
|
196
|
-
|
|
228
|
+
const startMs = Date.now();
|
|
197
229
|
const isFreeTool = freeTools.includes(name);
|
|
198
230
|
const result = await callLeafEnginesAPI(name, args, apiKey, isFreeTool);
|
|
231
|
+
const latencyMs = Date.now() - startMs;
|
|
232
|
+
// Telemetry: successful tool call
|
|
233
|
+
sendTelemetryEvent({
|
|
234
|
+
surface: "mcp",
|
|
235
|
+
event_type: "tool_call",
|
|
236
|
+
tool_name: name,
|
|
237
|
+
latency_ms: latencyMs,
|
|
238
|
+
status_code: 200,
|
|
239
|
+
api_key_prefix: apiKey ? apiKey.slice(0, 8) : null,
|
|
240
|
+
metadata: {
|
|
241
|
+
success: true,
|
|
242
|
+
is_free: isFreeTool,
|
|
243
|
+
has_result: !!result,
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
trackToolUsage(name);
|
|
199
247
|
return {
|
|
200
248
|
content: [
|
|
201
249
|
{
|
|
@@ -206,7 +254,21 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
206
254
|
};
|
|
207
255
|
}
|
|
208
256
|
catch (error) {
|
|
209
|
-
|
|
257
|
+
const status = error.response?.status ?? 0;
|
|
258
|
+
// Telemetry: error event
|
|
259
|
+
sendTelemetryEvent({
|
|
260
|
+
surface: "mcp",
|
|
261
|
+
event_type: "error",
|
|
262
|
+
tool_name: name,
|
|
263
|
+
status_code: status,
|
|
264
|
+
api_key_prefix: apiKey ? apiKey.slice(0, 8) : null,
|
|
265
|
+
error_message: error.message?.slice(0, 1000) ?? null,
|
|
266
|
+
metadata: {
|
|
267
|
+
error_type: error.code ?? "unknown",
|
|
268
|
+
has_response: !!error.response,
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
trackToolUsage(`${name}:error`);
|
|
210
272
|
if (error.response?.status === 401) {
|
|
211
273
|
return {
|
|
212
274
|
content: [
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;GAgBG;;;;;AAEH,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAC5C,kDAA0B;AAE1B,4BAA4B;AAC5B,MAAM,MAAM,GAAG,IAAI,iBAAM,CACvB;IACE,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ancientwhispers54/leafengines-mcp-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.7",
|
|
4
4
|
"mcpName": "io.github.QWarranto/leafengines",
|
|
5
5
|
"description": "LeafEngines MCP Server — Patent-protected agricultural intelligence for AI agents. 1,092+ downloads. Free tier with test key leaf-test-370df0a2e62e. Soil analysis, crop recommendations, environmental intelligence from USDA, EPA, NOAA data. Works with Claude Desktop, Cursor, OpenClaw.",
|
|
6
6
|
"main": "dist/index.js",
|