rhombus-node-mcp 0.1.48 → 0.1.49
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/telemetry/tracingProxy.js +19 -2
- package/package.json +10 -2
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
1
|
+
import { context, SpanKind, SpanStatusCode, trace, TraceFlags, } from "@opentelemetry/api";
|
|
2
2
|
import { resolveSessionIdentity } from "../api/get-accessible-apps.js";
|
|
3
3
|
import { logger } from "../logger.js";
|
|
4
4
|
import { extractFromToolExtra } from "../util.js";
|
|
5
5
|
const TRACER_NAME = "rhombus-node-mcp";
|
|
6
6
|
const TOOL_CALL_SPAN = "mcp.tool.call";
|
|
7
|
+
const INVALID_TRACE_ID = "00000000000000000000000000000000";
|
|
8
|
+
let warnedNoopTracer = false;
|
|
9
|
+
function warnIfNoopTracer(span) {
|
|
10
|
+
if (warnedNoopTracer)
|
|
11
|
+
return;
|
|
12
|
+
const { traceId, traceFlags } = span.spanContext();
|
|
13
|
+
if (traceId === INVALID_TRACE_ID || traceFlags === TraceFlags.NONE) {
|
|
14
|
+
warnedNoopTracer = true;
|
|
15
|
+
logger.warn("📡 OpenTelemetry custom spans are no-ops — @opentelemetry/api is not sharing the SDK TracerProvider. Check for duplicate @opentelemetry/api in node_modules.");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
7
18
|
function setArgKeys(span, args) {
|
|
8
19
|
if (args && typeof args === "object") {
|
|
9
20
|
const keys = Object.keys(args);
|
|
@@ -34,7 +45,9 @@ async function attachSessionIdentity(span, extra) {
|
|
|
34
45
|
function wrapHandler(toolName, handler) {
|
|
35
46
|
return async (args, extra) => {
|
|
36
47
|
const tracer = trace.getTracer(TRACER_NAME);
|
|
37
|
-
|
|
48
|
+
const parentContext = context.active();
|
|
49
|
+
return tracer.startActiveSpan(TOOL_CALL_SPAN, { kind: SpanKind.INTERNAL }, parentContext, async (span) => {
|
|
50
|
+
warnIfNoopTracer(span);
|
|
38
51
|
const start = Date.now();
|
|
39
52
|
span.setAttribute("mcp.tool.name", toolName);
|
|
40
53
|
span.setAttribute("mcp.transport", process.env.TRANSPORT_TYPE ?? "stdio");
|
|
@@ -50,6 +63,9 @@ function wrapHandler(toolName, handler) {
|
|
|
50
63
|
message: "tool returned isError",
|
|
51
64
|
});
|
|
52
65
|
}
|
|
66
|
+
else {
|
|
67
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
68
|
+
}
|
|
53
69
|
return result;
|
|
54
70
|
}
|
|
55
71
|
catch (error) {
|
|
@@ -63,6 +79,7 @@ function wrapHandler(toolName, handler) {
|
|
|
63
79
|
}
|
|
64
80
|
finally {
|
|
65
81
|
span.setAttribute("mcp.tool.duration_ms", Date.now() - start);
|
|
82
|
+
span.end();
|
|
66
83
|
}
|
|
67
84
|
});
|
|
68
85
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rhombus-node-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.49",
|
|
4
4
|
"description": "MCP server for Rhombus API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -50,7 +50,6 @@
|
|
|
50
50
|
],
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
53
|
-
"@opentelemetry/api": "^1.9.0",
|
|
54
53
|
"axios": "^1.11.0",
|
|
55
54
|
"cheerio": "^1.1.2",
|
|
56
55
|
"chrono-node": "^2.8.0",
|
|
@@ -66,6 +65,7 @@
|
|
|
66
65
|
"zod": "^4.3.6"
|
|
67
66
|
},
|
|
68
67
|
"devDependencies": {
|
|
68
|
+
"@opentelemetry/api": "^1.9.0",
|
|
69
69
|
"@types/cors": "^2.8.19",
|
|
70
70
|
"@types/express": "^5.0.3",
|
|
71
71
|
"@types/luxon": "^3.6.2",
|
|
@@ -78,5 +78,13 @@
|
|
|
78
78
|
},
|
|
79
79
|
"engines": {
|
|
80
80
|
"node": ">=18"
|
|
81
|
+
},
|
|
82
|
+
"peerDependencies": {
|
|
83
|
+
"@opentelemetry/api": "^1.9.0"
|
|
84
|
+
},
|
|
85
|
+
"peerDependenciesMeta": {
|
|
86
|
+
"@opentelemetry/api": {
|
|
87
|
+
"optional": true
|
|
88
|
+
}
|
|
81
89
|
}
|
|
82
90
|
}
|