@stigmer/mcp-server 3.5.3 → 3.6.0

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/server.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/src/config.ts CHANGED
@@ -19,8 +19,12 @@ export type Transport = "stdio" | "http" | "both";
19
19
  * argument surface. This is what the runner-synthesized datastore
20
20
  * attachment spawns over stdio (T05 R1); over HTTP the same roster is
21
21
  * served on the /records route regardless of this setting.
22
+ * - "channels": only send_channel_message (proactive-messaging DD-006
23
+ * D8) with the agent-facing argument surface. This is what the
24
+ * runner-synthesized channel attachment spawns over stdio; over HTTP
25
+ * the same roster is served on the /channels route.
22
26
  */
23
- export type Roster = "full" | "records";
27
+ export type Roster = "full" | "records" | "channels";
24
28
 
25
29
  /**
26
30
  * OAuth 2.0 Protected Resource Metadata (RFC 9728) discovery settings.
@@ -58,7 +62,7 @@ export interface Config {
58
62
  }
59
63
 
60
64
  const VALID_TRANSPORTS: readonly string[] = ["stdio", "http", "both"];
61
- const VALID_ROSTERS: readonly string[] = ["full", "records"];
65
+ const VALID_ROSTERS: readonly string[] = ["full", "records", "channels"];
62
66
  const VALID_LOG_FORMATS: readonly string[] = ["text", "json"];
63
67
  const VALID_LOG_LEVELS: readonly string[] = ["debug", "info", "warn", "error"];
64
68
 
@@ -97,7 +101,9 @@ export function validateConfig(cfg: Config): void {
97
101
  }
98
102
 
99
103
  if (!VALID_ROSTERS.includes(cfg.roster)) {
100
- throw new Error(`invalid STIGMER_MCP_ROSTER "${cfg.roster}": must be full or records`);
104
+ throw new Error(
105
+ `invalid STIGMER_MCP_ROSTER "${cfg.roster}": must be full, records, or channels`,
106
+ );
101
107
  }
102
108
 
103
109
  if (cfg.stigmerServerAddress === "") {
@@ -0,0 +1,86 @@
1
+ // Channel-messaging RPC invocations for the send_channel_message tool —
2
+ // a 1:1 projection of ChannelMessageCommandController.sendMessage
3
+ // (proactive-messaging DD-006 D5: the tool layer adds no semantics;
4
+ // reach, recipient policy, caps, and the template pre-check all live in
5
+ // the cloud handler, and the OSS edition refuses with the documented
6
+ // FAILED_PRECONDITION).
7
+ //
8
+ // The records-domain calls.ts shape: build request, call, marshal. The
9
+ // typed outcome (accepted/queued/refused + detail) rides back VERBATIM
10
+ // as proto JSON — a refusal is an ANSWER the model adapts to (DD-002
11
+ // D4), never a tool error.
12
+
13
+ import { create } from "@bufbuild/protobuf";
14
+ import {
15
+ ChannelMessageCommandController,
16
+ } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_command_pb";
17
+ import {
18
+ ChannelOutboundPayloadSchema,
19
+ SendChannelMessageInputSchema,
20
+ SendChannelMessageOutputSchema,
21
+ TemplatePayloadSchema,
22
+ TextPayloadSchema,
23
+ type ChannelOutboundPayload,
24
+ } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
25
+ import { withClient } from "../client.js";
26
+ import { toProtoJson } from "../marshal.js";
27
+
28
+ /** The template arm as the model supplies it (mirrors TemplatePayload). */
29
+ export interface TemplateArg {
30
+ name: string;
31
+ language?: string;
32
+ parameters?: Record<string, string>;
33
+ header_image_link?: string;
34
+ }
35
+
36
+ export interface SendArgs {
37
+ recipient: string;
38
+ text?: string;
39
+ template?: TemplateArg;
40
+ channel?: string;
41
+ }
42
+
43
+ export async function sendChannelMessage(
44
+ serverAddress: string,
45
+ token: string,
46
+ args: SendArgs,
47
+ ): Promise<string> {
48
+ const request = create(SendChannelMessageInputSchema, {
49
+ channel: args.channel ?? "",
50
+ // org is deliberately never sent: a session-bound caller's org is
51
+ // server-derived, and an explicit value is rejected (the records
52
+ // T05 R3 rule applied to messaging).
53
+ recipient: args.recipient,
54
+ payload: buildPayload(args),
55
+ });
56
+ return withClient(ChannelMessageCommandController, serverAddress, token, async (client, opts) =>
57
+ toProtoJson(SendChannelMessageOutputSchema, await client.sendMessage(request, opts)),
58
+ );
59
+ }
60
+
61
+ /**
62
+ * The payload oneof from the tool's mutually exclusive arguments. The
63
+ * tool handler enforces exactly-one before calling; the server's
64
+ * required-oneof validation is the backstop.
65
+ */
66
+ function buildPayload(args: SendArgs): ChannelOutboundPayload {
67
+ if (args.template !== undefined) {
68
+ return create(ChannelOutboundPayloadSchema, {
69
+ kind: {
70
+ case: "template",
71
+ value: create(TemplatePayloadSchema, {
72
+ name: args.template.name,
73
+ language: args.template.language ?? "",
74
+ parameters: args.template.parameters ?? {},
75
+ headerImageLink: args.template.header_image_link ?? "",
76
+ }),
77
+ },
78
+ });
79
+ }
80
+ return create(ChannelOutboundPayloadSchema, {
81
+ kind: {
82
+ case: "text",
83
+ value: create(TextPayloadSchema, { body: args.text ?? "" }),
84
+ },
85
+ });
86
+ }
@@ -0,0 +1,272 @@
1
+ // In-process integration test for the channels roster (the
2
+ // records.integration.test.ts pattern: real Connect backend with a
3
+ // stubbed messaging service, real MCP client over an in-memory
4
+ // transport).
5
+ //
6
+ // Verifies the DD-006 D5/D8 contract surface:
7
+ // - the channels-only roster is exactly send_channel_message with NO
8
+ // org argument (agent audience);
9
+ // - argument → request mapping mirrors the ChannelOutboundPayload
10
+ // oneof (text | template, exactly one, checked before any RPC);
11
+ // - typed outcomes (accepted/queued/refused) are ANSWERS — success
12
+ // results the model adapts to, never isError;
13
+ // - the channels-own error mapper passes domain messages verbatim as
14
+ // {error, code, reason} JSON; transport errors delegate to the
15
+ // shared classifier.
16
+
17
+ import { create } from "@bufbuild/protobuf";
18
+ import { Code, ConnectError, type ConnectRouter } from "@connectrpc/connect";
19
+ import { connectNodeAdapter } from "@connectrpc/connect-node";
20
+ import {
21
+ createServer as createHttp2Server,
22
+ type Http2Server,
23
+ type ServerHttp2Session,
24
+ } from "node:http2";
25
+ import type { AddressInfo } from "node:net";
26
+
27
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
28
+ import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
29
+ import { ChannelMessageCommandController } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_command_pb";
30
+ import {
31
+ ChannelSendOutcome,
32
+ SendChannelMessageOutputSchema,
33
+ type SendChannelMessageInput,
34
+ } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
35
+ import { ErrorInfoSchema } from "@stigmer/protos/google/rpc/error_details_pb";
36
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
37
+
38
+ import { configureLogger } from "../../logger";
39
+ import { CHANNELS_ROUTE, createChannelsServer } from "../../server";
40
+
41
+ configureLogger({ level: "error", format: "text" });
42
+
43
+ let backend: Http2Server;
44
+ let client: Client;
45
+ const openSessions = new Set<ServerHttp2Session>();
46
+
47
+ /** The next stubbed outcome; tests set this. */
48
+ let sendResponse: () => ReturnType<typeof create<typeof SendChannelMessageOutputSchema>>;
49
+
50
+ /** Requests the stub captured (object property for closure narrowing). */
51
+ const captured: { send?: SendChannelMessageInput } = {};
52
+
53
+ interface ToolResult {
54
+ content: Array<{ type: string; text?: string }>;
55
+ isError?: boolean;
56
+ }
57
+
58
+ async function send(args: Record<string, unknown>): Promise<ToolResult> {
59
+ return (await client.callTool({
60
+ name: "send_channel_message",
61
+ arguments: args,
62
+ })) as ToolResult;
63
+ }
64
+
65
+ beforeAll(async () => {
66
+ const routes = (router: ConnectRouter) => {
67
+ router.service(ChannelMessageCommandController, {
68
+ sendMessage: (req) => {
69
+ captured.send = req;
70
+ return sendResponse();
71
+ },
72
+ });
73
+ };
74
+ backend = createHttp2Server(connectNodeAdapter({ routes }));
75
+ backend.on("session", (session) => {
76
+ openSessions.add(session);
77
+ session.on("close", () => openSessions.delete(session));
78
+ });
79
+ await new Promise<void>((resolve) => backend.listen(0, "127.0.0.1", resolve));
80
+ const port = (backend.address() as AddressInfo).port;
81
+
82
+ const mcp = createChannelsServer({ serverAddress: `127.0.0.1:${port}`, apiKey: "" });
83
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
84
+ client = new Client({ name: "channels-integration", version: "test" });
85
+ await Promise.all([mcp.connect(serverTransport), client.connect(clientTransport)]);
86
+ });
87
+
88
+ afterAll(async () => {
89
+ await client?.close();
90
+ for (const session of openSessions) session.destroy();
91
+ await new Promise<void>((resolve) => backend.close(() => resolve()));
92
+ });
93
+
94
+ describe("channels roster (DD-006 D8)", () => {
95
+ it("exposes exactly send_channel_message with no org argument", async () => {
96
+ const { tools } = await client.listTools();
97
+ expect(tools.map((t) => t.name)).toEqual(["send_channel_message"]);
98
+
99
+ // The agent audience gets no org argument — a session-bound
100
+ // caller's org is server-derived, and offering the argument would
101
+ // only invite INVALID_ARGUMENT rejections (the records T05 R3 rule).
102
+ const properties = (tools[0].inputSchema as { properties?: Record<string, unknown> })
103
+ .properties;
104
+ expect(Object.keys(properties ?? {}).sort()).toEqual([
105
+ "channel",
106
+ "recipient",
107
+ "template",
108
+ "text",
109
+ ]);
110
+ });
111
+
112
+ it("pins the cross-repo attachment strings (the TOOL_CALL_LIMIT precedent)", () => {
113
+ // The runner's channel-attachment.ts builds these independently
114
+ // (shared/channel-attachment.ts and its mirror guard); a drift here
115
+ // strands every synthesized attachment on a 404 or a full roster.
116
+ expect(CHANNELS_ROUTE).toBe("/channels");
117
+ });
118
+ });
119
+
120
+ describe("argument → request mapping (the ChannelOutboundPayload oneof)", () => {
121
+ it("maps a text send; org never travels, channel defaults empty", async () => {
122
+ sendResponse = () =>
123
+ create(SendChannelMessageOutputSchema, {
124
+ outcome: ChannelSendOutcome.accepted,
125
+ outboundMessageId: "chom_1",
126
+ providerMessageId: "wamid.abc",
127
+ });
128
+ captured.send = undefined;
129
+
130
+ const result = await send({ recipient: "919000000001", text: "see you at 6" });
131
+
132
+ expect(result.isError).toBeFalsy();
133
+ const req = captured.send as SendChannelMessageInput | undefined;
134
+ expect(req?.recipient).toBe("919000000001");
135
+ expect(req?.org).toBe(""); // agent audience: org never travels
136
+ expect(req?.channel).toBe("");
137
+ expect(req?.payload?.kind.case).toBe("text");
138
+ expect(req?.payload?.kind.case === "text" && req.payload.kind.value.body).toBe("see you at 6");
139
+
140
+ // toProtoJson emits proto (snake_case) field names — the Go parity rule.
141
+ const body = JSON.parse(result.content[0]?.text ?? "{}") as Record<string, string>;
142
+ expect(body.outcome).toBe("accepted");
143
+ expect(body.provider_message_id).toBe("wamid.abc");
144
+ });
145
+
146
+ it("maps a template send with language, parameters, header link, and a named channel", async () => {
147
+ sendResponse = () =>
148
+ create(SendChannelMessageOutputSchema, { outcome: ChannelSendOutcome.accepted });
149
+ captured.send = undefined;
150
+
151
+ const result = await send({
152
+ recipient: "919000000001",
153
+ channel: "isc-whatsapp",
154
+ template: {
155
+ name: "invoice_qr",
156
+ language: "en",
157
+ parameters: { member_name: "Asha", amount: "1500" },
158
+ header_image_link: "https://isc.example/qr.png",
159
+ },
160
+ });
161
+
162
+ expect(result.isError).toBeFalsy();
163
+ const req = captured.send as SendChannelMessageInput | undefined;
164
+ expect(req?.channel).toBe("isc-whatsapp");
165
+ expect(req?.payload?.kind.case).toBe("template");
166
+ if (req?.payload?.kind.case === "template") {
167
+ expect(req.payload.kind.value.name).toBe("invoice_qr");
168
+ expect(req.payload.kind.value.language).toBe("en");
169
+ expect(req.payload.kind.value.parameters).toMatchObject({
170
+ member_name: "Asha",
171
+ amount: "1500",
172
+ });
173
+ expect(req.payload.kind.value.headerImageLink).toBe("https://isc.example/qr.png");
174
+ }
175
+ });
176
+
177
+ it("refuses both/neither arms with corrective copy, before any RPC", async () => {
178
+ captured.send = undefined;
179
+
180
+ const both = await send({
181
+ recipient: "919000000001",
182
+ text: "hi",
183
+ template: { name: "fee_reminder" },
184
+ });
185
+ expect(both.isError).toBe(true);
186
+ expect(both.content[0]?.text).toContain("exactly one of text | template");
187
+
188
+ const neither = await send({ recipient: "919000000001" });
189
+ expect(neither.isError).toBe(true);
190
+ expect(neither.content[0]?.text).toContain("exactly one of text | template");
191
+
192
+ expect(captured.send).toBeUndefined();
193
+ });
194
+ });
195
+
196
+ describe("typed outcomes are answers, not errors (DD-002 D4)", () => {
197
+ it("a refused outcome returns as a SUCCESS result carrying the detail", async () => {
198
+ sendResponse = () =>
199
+ create(SendChannelMessageOutputSchema, {
200
+ outcome: ChannelSendOutcome.refused,
201
+ outboundMessageId: "",
202
+ detail:
203
+ "recipient has not messaged this channel — proactive sends from a channel"
204
+ + " conversation are limited to known senders",
205
+ });
206
+
207
+ const result = await send({ recipient: "919000000002", text: "hello" });
208
+
209
+ expect(result.isError).toBeFalsy();
210
+ const body = JSON.parse(result.content[0]?.text ?? "{}") as Record<string, string>;
211
+ expect(body.outcome).toBe("refused");
212
+ expect(body.detail).toContain("known senders");
213
+ });
214
+ });
215
+
216
+ describe("channels error mapper", () => {
217
+ it("passes a reach denial through verbatim — never the shared rewrite", async () => {
218
+ sendResponse = () => {
219
+ throw new ConnectError(
220
+ "this agent has no proactive-messaging channel it can use",
221
+ Code.PermissionDenied,
222
+ );
223
+ };
224
+
225
+ const result = await send({ recipient: "919000000001", text: "hello" });
226
+
227
+ expect(result.isError).toBe(true);
228
+ expect(JSON.parse(result.content[0]?.text ?? "{}")).toEqual({
229
+ error: "this agent has no proactive-messaging channel it can use",
230
+ code: "PERMISSION_DENIED",
231
+ });
232
+ });
233
+
234
+ it("carries the ErrorInfo reason on operator-actionable preconditions (DD-005 D8)", async () => {
235
+ sendResponse = () => {
236
+ throw new ConnectError(
237
+ "proactive channel messaging requires Stigmer Cloud",
238
+ Code.FailedPrecondition,
239
+ undefined,
240
+ [
241
+ {
242
+ desc: ErrorInfoSchema,
243
+ value: create(ErrorInfoSchema, {
244
+ reason: "WHATSAPP_MANAGEMENT_SCOPE_MISSING",
245
+ domain: "stigmer.ai",
246
+ }),
247
+ },
248
+ ],
249
+ );
250
+ };
251
+
252
+ const result = await send({ recipient: "919000000001", text: "hello" });
253
+
254
+ expect(result.isError).toBe(true);
255
+ const body = JSON.parse(result.content[0]?.text ?? "{}") as Record<string, string>;
256
+ expect(body.code).toBe("FAILED_PRECONDITION");
257
+ expect(body.reason).toBe("WHATSAPP_MANAGEMENT_SCOPE_MISSING");
258
+ });
259
+
260
+ it("delegates transport codes to the shared classifier", async () => {
261
+ sendResponse = () => {
262
+ throw new ConnectError("upstream down", Code.Unavailable);
263
+ };
264
+
265
+ const result = await send({ recipient: "919000000001", text: "hello" });
266
+
267
+ expect(result.isError).toBe(true);
268
+ expect(result.content[0]?.text).toBe(
269
+ "Stigmer server is unavailable. Ensure it is running and reachable.",
270
+ );
271
+ });
272
+ });
@@ -0,0 +1,94 @@
1
+ // The channels-domain error mapper — the records-domain sibling
2
+ // (DD-004 S-7's recorded posture: siblings share the idiom, never an
3
+ // abstraction over it; each domain documents its own contract).
4
+ //
5
+ // Channel-messaging domain errors carry agent-relayable messages that
6
+ // are contract bytes (proactive-messaging DD-002 D4's error table):
7
+ // "this agent has no proactive-messaging channel it can use", "channel
8
+ // is required: this agent serves multiple proactive-enabled channels:
9
+ // …", the OSS "proactive channel messaging requires Stigmer Cloud".
10
+ // The shared ../rpcerr.ts would rewrite them into transport advice and
11
+ // discard google.rpc.ErrorInfo; here the domain codes pass the server's
12
+ // message through VERBATIM as isError JSON `{error, code, reason}` so
13
+ // the model can self-correct (name the channel on INVALID_ARGUMENT;
14
+ // stop and relay on PERMISSION_DENIED). Transport codes still delegate
15
+ // to the shared helper, whose advice is right for them.
16
+ //
17
+ // Typed send outcomes (accepted/queued/refused) never reach this file:
18
+ // they are successful responses by design (DD-002 D4 — policy refusals
19
+ // are answers, not errors).
20
+
21
+ import { Code, ConnectError } from "@connectrpc/connect";
22
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
23
+ import { ErrorInfoSchema } from "@stigmer/protos/google/rpc/error_details_pb";
24
+ import { rpcError } from "../rpcerr.js";
25
+ import { errorResult, textResult } from "../toolresult.js";
26
+
27
+ /**
28
+ * The gRPC codes whose messages are the channel-messaging domain
29
+ * contract: reach denials (PERMISSION_DENIED, one fail-closed text per
30
+ * failure class), contract misuse with corrective copy
31
+ * (INVALID_ARGUMENT — ambiguous channel, ambiguous template language),
32
+ * and actionable preconditions (FAILED_PRECONDITION — the OSS refusal,
33
+ * not-installed, registry misconfiguration with its ErrorInfo reason).
34
+ */
35
+ const DOMAIN_CODES: ReadonlySet<Code> = new Set([
36
+ Code.PermissionDenied,
37
+ Code.InvalidArgument,
38
+ Code.FailedPrecondition,
39
+ ]);
40
+
41
+ /** The structured error payload channel tools return for domain errors. */
42
+ export interface ChannelToolError {
43
+ /** The server's relayable message, byte-for-byte. */
44
+ error: string;
45
+ /** gRPC status name in SCREAMING_SNAKE (e.g. PERMISSION_DENIED). */
46
+ code: string;
47
+ /** ErrorInfo reason (e.g. WHATSAPP_MANAGEMENT_SCOPE_MISSING), when present. */
48
+ reason?: string;
49
+ }
50
+
51
+ /**
52
+ * Run a channel-tool body: a string payload becomes a text result; a
53
+ * domain error becomes an isError JSON result carrying the verbatim
54
+ * message + ErrorInfo reason; a transport error delegates to the shared
55
+ * classifier. The only try/catch in this domain.
56
+ */
57
+ export async function channelResult(
58
+ toolContext: string,
59
+ produce: () => Promise<string>,
60
+ ): Promise<CallToolResult> {
61
+ try {
62
+ return textResult(await produce());
63
+ } catch (err) {
64
+ const ce = ConnectError.from(err);
65
+ if (DOMAIN_CODES.has(ce.code)) {
66
+ return {
67
+ content: [{ type: "text", text: JSON.stringify(domainError(ce)) }],
68
+ isError: true,
69
+ };
70
+ }
71
+ return errorResult(rpcError(ce, toolContext));
72
+ }
73
+ }
74
+
75
+ /** Project a domain ConnectError into the structured tool payload. */
76
+ export function domainError(ce: ConnectError): ChannelToolError {
77
+ const payload: ChannelToolError = {
78
+ error: ce.rawMessage,
79
+ code: grpcStatusName(ce.code),
80
+ };
81
+ // The messaging RPCs attach google.rpc.ErrorInfo to operator-actionable
82
+ // preconditions (DD-005 D8); absence means the message alone carries
83
+ // the contract.
84
+ const details = ce.findDetails(ErrorInfoSchema);
85
+ if (details.length > 0 && details[0].reason !== "") {
86
+ payload.reason = details[0].reason;
87
+ }
88
+ return payload;
89
+ }
90
+
91
+ /** Connect's PascalCase code name → the gRPC SCREAMING_SNAKE status name. */
92
+ function grpcStatusName(code: Code): string {
93
+ return Code[code].replace(/([a-z0-9])([A-Z])/g, "$1_$2").toUpperCase();
94
+ }
@@ -0,0 +1,112 @@
1
+ // The send_channel_message tool — the ONE tool of the channels roster
2
+ // (proactive-messaging DD-002 D7, arguments amended by DD-006 D5 to
3
+ // mirror the ChannelOutboundPayload oneof: `text` | `template`, exactly
4
+ // one).
5
+ //
6
+ // Agent audience only, by construction: this roster is what the
7
+ // runner-synthesized channel attachment connects to, and a session-bound
8
+ // caller's org derives from its token (an explicit org is rejected —
9
+ // the records T05 R3 rule), so no `org` argument exists to invite
10
+ // rejected calls. A direct-audience variant on the full roster is
11
+ // deliberately NOT registered: operators send through the console, CLI,
12
+ // and SDK, which carry the org+channel addressing the direct reach path
13
+ // requires.
14
+ //
15
+ // The typed outcome is the tool's answer, verbatim proto JSON:
16
+ // `accepted` (delivered to the provider), `queued` (transient failure —
17
+ // the platform retries in the background; do NOT resend), `refused`
18
+ // (terminal; `detail` says why — adapt, never retry the same send).
19
+
20
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
21
+ import { z } from "zod";
22
+
23
+ import { resolveToken, type BackendTarget } from "../client.js";
24
+ import { sendChannelMessage, type TemplateArg } from "./calls.js";
25
+ import { channelResult } from "./errors.js";
26
+ import { errorResult } from "../toolresult.js";
27
+
28
+ const templateShape = z.object({
29
+ name: z.string().describe("Approved template name on the channel's provider registry."),
30
+ language: z
31
+ .string()
32
+ .optional()
33
+ .describe(
34
+ "Template language code (e.g. en, en_US). Omit when the template exists in exactly one language.",
35
+ ),
36
+ parameters: z
37
+ .record(z.string())
38
+ .optional()
39
+ .describe(
40
+ 'Placeholder values. Positional templates key by position ("1", "2", …); ' +
41
+ 'named templates key by parameter name ("member_name").',
42
+ ),
43
+ header_image_link: z
44
+ .string()
45
+ .optional()
46
+ .describe(
47
+ "Public HTTPS URL for the image header. Required exactly when the template " +
48
+ "declares an image header.",
49
+ ),
50
+ });
51
+
52
+ /** Register the channel messaging tool; returns the tool names. */
53
+ export function registerChannelTools(server: McpServer, target: BackendTarget): string[] {
54
+ server.registerTool(
55
+ "send_channel_message",
56
+ {
57
+ description:
58
+ "Send a business-initiated message to a recipient on this agent's messaging channel " +
59
+ "(e.g. WhatsApp). Exactly one of text | template. Outside a 24-hour customer-service " +
60
+ "window the provider only accepts a pre-approved template, so prefer a template from " +
61
+ "<available_channel_templates>. The result carries a typed outcome: accepted (sent), " +
62
+ "queued (the platform retries in the background — do not resend), or refused " +
63
+ "(terminal; detail says why — adapt, never retry the same send).",
64
+ inputSchema: {
65
+ recipient: z
66
+ .string()
67
+ .describe("Recipient's key on the channel's provider (WhatsApp: the wa_id / phone number)."),
68
+ text: z
69
+ .string()
70
+ .optional()
71
+ .describe(
72
+ "Plain text body. Only deliverable inside an open 24-hour customer-service window.",
73
+ ),
74
+ template: templateShape
75
+ .optional()
76
+ .describe("Pre-approved template send — required outside a 24-hour window."),
77
+ channel: z
78
+ .string()
79
+ .optional()
80
+ .describe(
81
+ "Channel slug. Only needed when this agent serves more than one " +
82
+ "proactive-messaging channel (a refusal will list them).",
83
+ ),
84
+ },
85
+ },
86
+ (args, extra) => {
87
+ // Exactly-one, checked here with corrective copy the model can act
88
+ // on immediately; the server's required-oneof validation is the
89
+ // backstop (DD-006 D5).
90
+ const hasText = args.text !== undefined && args.text !== "";
91
+ const hasTemplate = args.template !== undefined;
92
+ if (hasText === hasTemplate) {
93
+ return Promise.resolve(errorResult(
94
+ hasText
95
+ ? "supply exactly one of text | template, not both"
96
+ : "supply exactly one of text | template — text for an open 24-hour window, " +
97
+ "template otherwise",
98
+ ));
99
+ }
100
+ return channelResult(`message to "${args.recipient}"`, () =>
101
+ sendChannelMessage(target.serverAddress, resolveToken(extra, target.apiKey), {
102
+ recipient: args.recipient,
103
+ text: args.text,
104
+ template: args.template as TemplateArg | undefined,
105
+ channel: args.channel,
106
+ }),
107
+ );
108
+ },
109
+ );
110
+
111
+ return ["send_channel_message"];
112
+ }