@relaycast/mcp 0.5.0 → 0.5.1
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/stdio.js +7 -4
- package/dist/stdio.js.map +1 -1
- package/dist/transports.d.ts +1 -1
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +55 -13
- package/dist/transports.js.map +1 -1
- package/package.json +3 -3
package/dist/stdio.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { startStdio } from
|
|
2
|
+
import { startStdio } from "./transports.js";
|
|
3
3
|
/**
|
|
4
4
|
* Resolve the Relaycast API key from RELAY_API_KEY env var.
|
|
5
5
|
* When spawned by the broker, RELAY_API_KEY is always injected into the environment.
|
|
@@ -11,13 +11,16 @@ function parseStrictAgentName(value) {
|
|
|
11
11
|
if (!value)
|
|
12
12
|
return false;
|
|
13
13
|
const normalized = value.trim().toLowerCase();
|
|
14
|
-
return normalized ===
|
|
14
|
+
return (normalized === "1" ||
|
|
15
|
+
normalized === "true" ||
|
|
16
|
+
normalized === "yes" ||
|
|
17
|
+
normalized === "on");
|
|
15
18
|
}
|
|
16
19
|
function parseAgentType(value) {
|
|
17
20
|
if (!value)
|
|
18
21
|
return undefined;
|
|
19
22
|
const normalized = value.trim().toLowerCase();
|
|
20
|
-
if (normalized ===
|
|
23
|
+
if (normalized === "agent" || normalized === "human") {
|
|
21
24
|
return normalized;
|
|
22
25
|
}
|
|
23
26
|
return undefined;
|
|
@@ -26,7 +29,7 @@ startStdio({
|
|
|
26
29
|
apiKey: resolveApiKey(),
|
|
27
30
|
baseUrl: process.env.RELAY_BASE_URL,
|
|
28
31
|
agentToken: process.env.RELAY_AGENT_TOKEN,
|
|
29
|
-
agentName: process.env.RELAY_AGENT_NAME,
|
|
32
|
+
agentName: process.env.RELAY_AGENT_NAME ?? process.env.RELAY_CLAW_NAME,
|
|
30
33
|
agentType: parseAgentType(process.env.RELAY_AGENT_TYPE),
|
|
31
34
|
strictAgentName: parseStrictAgentName(process.env.RELAY_STRICT_AGENT_NAME),
|
|
32
35
|
});
|
package/dist/stdio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;GAGG;AACH,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACnC,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAyB;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,UAAU,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;GAGG;AACH,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACnC,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAyB;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,CACL,UAAU,KAAK,GAAG;QAClB,UAAU,KAAK,MAAM;QACrB,UAAU,KAAK,KAAK;QACpB,UAAU,KAAK,IAAI,CACpB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAAyB;IAEzB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QACrD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,UAAU,CAAC;IACT,MAAM,EAAE,aAAa,EAAE;IACvB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;IACnC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;IACzC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;IACtE,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACvD,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;CAC3E,CAAC,CAAC"}
|
package/dist/transports.d.ts
CHANGED
package/dist/transports.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports.d.ts","sourceRoot":"","sources":["../src/transports.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transports.d.ts","sourceRoot":"","sources":["../src/transports.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AAmDrB;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzE;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAWD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,gBAAgB,EAC7B,SAAS,CAAC,EAAE,gBAAgB;IAG1B,2DAA2D;4BACnC,MAAM;yBAGvB,OAAO,WAAW,EAAE,eAAe,OACnC,OAAO,WAAW,EAAE,cAAc;EAoD5C"}
|
package/dist/transports.js
CHANGED
|
@@ -1,14 +1,56 @@
|
|
|
1
|
-
import { StdioServerTransport } from
|
|
2
|
-
import { StreamableHTTPServerTransport } from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
2
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
3
|
+
import { createInternalRelayCast } from "@relaycast/sdk/internal";
|
|
4
|
+
import { createRelayMcpServer, MCP_VERSION, } from "./server.js";
|
|
5
|
+
import { randomUUID } from "node:crypto";
|
|
6
|
+
import { createMcpTelemetry } from "./telemetry.js";
|
|
7
|
+
async function resolveStdioBootstrapOptions(options) {
|
|
8
|
+
if (!options.apiKey || !options.agentName) {
|
|
9
|
+
return options;
|
|
10
|
+
}
|
|
11
|
+
const relay = createInternalRelayCast({
|
|
12
|
+
apiKey: options.apiKey,
|
|
13
|
+
baseUrl: options.baseUrl,
|
|
14
|
+
}, {
|
|
15
|
+
surface: "mcp",
|
|
16
|
+
client: "@relaycast/mcp",
|
|
17
|
+
version: MCP_VERSION,
|
|
18
|
+
});
|
|
19
|
+
if (options.agentToken) {
|
|
20
|
+
try {
|
|
21
|
+
await relay.as(options.agentToken).inbox();
|
|
22
|
+
return options;
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const relayErr = err;
|
|
26
|
+
const unauthorized = relayErr?.code === "unauthorized" ||
|
|
27
|
+
relayErr?.statusCode === 401 ||
|
|
28
|
+
relayErr?.statusCode === 403;
|
|
29
|
+
if (!unauthorized) {
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const registered = await relay.agents.registerOrRotate({
|
|
35
|
+
name: options.agentName,
|
|
36
|
+
type: options.agentType,
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
...options,
|
|
40
|
+
agentToken: registered.token,
|
|
41
|
+
agentName: registered.name ?? options.agentName,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
6
44
|
/**
|
|
7
45
|
* Start MCP server with stdio transport (single agent).
|
|
8
46
|
* Reads from stdin, writes to stdout.
|
|
9
47
|
*/
|
|
10
48
|
export async function startStdio(options) {
|
|
11
|
-
const
|
|
49
|
+
const bootstrappedOptions = await resolveStdioBootstrapOptions(options);
|
|
50
|
+
const mcpServer = createRelayMcpServer({
|
|
51
|
+
...bootstrappedOptions,
|
|
52
|
+
telemetryTransport: "stdio",
|
|
53
|
+
});
|
|
12
54
|
const transport = new StdioServerTransport();
|
|
13
55
|
await mcpServer.connect(transport);
|
|
14
56
|
}
|
|
@@ -27,7 +69,7 @@ export function createHttpHandler(baseOptions, lifecycle) {
|
|
|
27
69
|
hasSession: (sessionId) => sessions.has(sessionId),
|
|
28
70
|
handleRequest: async (req, res) => {
|
|
29
71
|
// Check for existing session
|
|
30
|
-
const sessionId = req.headers[
|
|
72
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
31
73
|
if (sessionId && sessions.has(sessionId)) {
|
|
32
74
|
const session = sessions.get(sessionId);
|
|
33
75
|
await session.transport.handleRequest(req, res);
|
|
@@ -35,8 +77,8 @@ export function createHttpHandler(baseOptions, lifecycle) {
|
|
|
35
77
|
}
|
|
36
78
|
// New session — create fresh MCP server + transport + telemetry
|
|
37
79
|
const telemetry = createMcpTelemetry(MCP_VERSION, {
|
|
38
|
-
originSurface:
|
|
39
|
-
originClient:
|
|
80
|
+
originSurface: "mcp",
|
|
81
|
+
originClient: "@relaycast/mcp",
|
|
40
82
|
originVersion: MCP_VERSION,
|
|
41
83
|
});
|
|
42
84
|
const transport = new StreamableHTTPServerTransport({
|
|
@@ -44,7 +86,7 @@ export function createHttpHandler(baseOptions, lifecycle) {
|
|
|
44
86
|
});
|
|
45
87
|
const mcpServer = createRelayMcpServer({
|
|
46
88
|
...baseOptions,
|
|
47
|
-
telemetryTransport:
|
|
89
|
+
telemetryTransport: "http",
|
|
48
90
|
telemetry,
|
|
49
91
|
});
|
|
50
92
|
transport.onclose = () => {
|
|
@@ -60,9 +102,9 @@ export function createHttpHandler(baseOptions, lifecycle) {
|
|
|
60
102
|
if (transport.sessionId && !sessions.has(transport.sessionId)) {
|
|
61
103
|
sessions.set(transport.sessionId, { transport });
|
|
62
104
|
lifecycle?.onCreated?.(transport.sessionId);
|
|
63
|
-
telemetry.capture(
|
|
64
|
-
source_surface:
|
|
65
|
-
transport:
|
|
105
|
+
telemetry.capture("relaycast_mcp_http_session_started", {
|
|
106
|
+
source_surface: "mcp",
|
|
107
|
+
transport: "http",
|
|
66
108
|
mcp_transport_session_id: transport.sessionId,
|
|
67
109
|
});
|
|
68
110
|
}
|
package/dist/transports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports.js","sourceRoot":"","sources":["../src/transports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"transports.js","sourceRoot":"","sources":["../src/transports.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@relaycast/mcp",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"lint": "eslint src/"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@relaycast/sdk": "0.5.
|
|
17
|
-
"@relaycast/types": "0.5.
|
|
16
|
+
"@relaycast/sdk": "0.5.1",
|
|
17
|
+
"@relaycast/types": "0.5.1",
|
|
18
18
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
19
19
|
"express": "^5.2.1",
|
|
20
20
|
"zod": "^4.3.6"
|