@sendora/mcp 1.13.0 → 1.14.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/dist/errors.js +2 -0
- package/dist/generated/docs.json +1 -1
- package/dist/generated/screens/domain-records.html +1 -1
- package/dist/generated/screens/message-timeline.html +1 -1
- package/dist/tools/broadcast-input.js +8 -0
- package/dist/tools/broadcasts.js +2 -0
- package/dist/tools/send-input.js +8 -0
- package/dist/tools/send.js +2 -0
- package/dist/tools/server.js +6 -0
- package/dist/tools/tracking-domains.js +2 -2
- package/dist/tools/tracking-opt-outs.js +2 -3
- package/dist/version.js +1 -1
- package/package.json +3 -3
|
@@ -63,6 +63,14 @@ export const broadcastInput = z
|
|
|
63
63
|
metadata: metadata
|
|
64
64
|
.optional()
|
|
65
65
|
.describe('Up to 20 key-value pairs of your own, on the broadcast and on every message.'),
|
|
66
|
+
trackOpens: z
|
|
67
|
+
.boolean()
|
|
68
|
+
.optional()
|
|
69
|
+
.describe("Whether the opens of every message are tracked, whatever the stream's switch in get_server says; left out, the stream decides. true is refused until an administrator has first switched tracking on in the dashboard."),
|
|
70
|
+
trackLinks: z
|
|
71
|
+
.boolean()
|
|
72
|
+
.optional()
|
|
73
|
+
.describe("Whether the links of every message are tracked, whatever the stream's switch in get_server says; left out, the stream decides. true is refused until an administrator has first switched tracking on in the dashboard."),
|
|
66
74
|
messages: z
|
|
67
75
|
.array(entry)
|
|
68
76
|
.min(1)
|
package/dist/tools/broadcasts.js
CHANGED
|
@@ -71,6 +71,8 @@ export function broadcastRequestOf(input) {
|
|
|
71
71
|
attachments: input.attachments,
|
|
72
72
|
tag: input.tag,
|
|
73
73
|
metadata: input.metadata,
|
|
74
|
+
trackOpens: input.trackOpens,
|
|
75
|
+
trackLinks: input.trackLinks,
|
|
74
76
|
messages: input.messages,
|
|
75
77
|
};
|
|
76
78
|
if (input.text !== undefined) {
|
package/dist/tools/send-input.js
CHANGED
|
@@ -33,6 +33,14 @@ export const sendInput = z
|
|
|
33
33
|
metadata: metadata
|
|
34
34
|
.optional()
|
|
35
35
|
.describe('Up to 20 key-value pairs of your own, returned with the message and its events.'),
|
|
36
|
+
trackOpens: z
|
|
37
|
+
.boolean()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("Whether this message's opens are tracked, whatever its stream's switch in get_server says; left out, the stream decides. true is refused until an administrator has first switched tracking on in the dashboard."),
|
|
40
|
+
trackLinks: z
|
|
41
|
+
.boolean()
|
|
42
|
+
.optional()
|
|
43
|
+
.describe("Whether this message's links are tracked, whatever its stream's switch in get_server says; left out, the stream decides. true is refused until an administrator has first switched tracking on in the dashboard."),
|
|
36
44
|
waitSeconds: z
|
|
37
45
|
.number()
|
|
38
46
|
.int()
|
package/dist/tools/send.js
CHANGED
|
@@ -60,6 +60,8 @@ export function requestOf(input) {
|
|
|
60
60
|
attachments: input.attachments,
|
|
61
61
|
tag: input.tag,
|
|
62
62
|
metadata: input.metadata,
|
|
63
|
+
trackOpens: input.trackOpens,
|
|
64
|
+
trackLinks: input.trackLinks,
|
|
63
65
|
};
|
|
64
66
|
if (input.text !== undefined) {
|
|
65
67
|
return { ...fields, text: input.text, html: input.html };
|
package/dist/tools/server.js
CHANGED
|
@@ -63,6 +63,12 @@ export const streamOutput = z.object({
|
|
|
63
63
|
.int()
|
|
64
64
|
.nullable()
|
|
65
65
|
.describe('How many days an inbound stream keeps received content; null means the default of 30. Null on every other kind.'),
|
|
66
|
+
trackOpens: z
|
|
67
|
+
.boolean()
|
|
68
|
+
.describe("Whether the opens of the stream's mail are tracked, unless a message sets trackOpens. An administrator switches it in the dashboard."),
|
|
69
|
+
trackLinks: z
|
|
70
|
+
.boolean()
|
|
71
|
+
.describe("Whether the links in the stream's mail are tracked, unless a message sets trackLinks. An administrator switches it in the dashboard."),
|
|
66
72
|
});
|
|
67
73
|
export const serverOutput = z.object({
|
|
68
74
|
serverId: z.string().describe('The id the server keys, streams and messages refer to.'),
|
|
@@ -69,7 +69,7 @@ export const listTrackingDomainsTool = {
|
|
|
69
69
|
operations: ['GET /v1/tracking-domains'],
|
|
70
70
|
register: (server, { connection }) => server.registerTool('list_tracking_domains', {
|
|
71
71
|
title: 'List the tracking domains',
|
|
72
|
-
description: "Lists the account's tracking domains, the hosts that tracked links and the open pixel use, each with the CNAME record it needs, its state and what the last check found. check_tracking_domain looks them up now.
|
|
72
|
+
description: "Lists the account's tracking domains, the hosts that tracked links and the open pixel use, each with the CNAME record it needs, its state and what the last check found. check_tracking_domain looks them up now.",
|
|
73
73
|
inputSchema: z.object({}),
|
|
74
74
|
outputSchema: z.object({
|
|
75
75
|
trackingDomains: z
|
|
@@ -127,7 +127,7 @@ export const addTrackingDomainTool = {
|
|
|
127
127
|
operations: ['POST /v1/tracking-domains'],
|
|
128
128
|
register: (server, { connection }) => server.registerTool('add_tracking_domain', {
|
|
129
129
|
title: 'Add a tracking domain',
|
|
130
|
-
description: "Claims a host under one of the account's verified sending domains for tracked links and the open pixel, and answers the CNAME record for the user to add to the domain's DNS. check_tracking_domain then looks it up. A host whose records are not right within 7 days goes.
|
|
130
|
+
description: "Claims a host under one of the account's verified sending domains for tracked links and the open pixel, and answers the CNAME record for the user to add to the domain's DNS. check_tracking_domain then looks it up. A host whose records are not right within 7 days goes. This is for tracking only: add_domain adds the domain mail is sent from.",
|
|
131
131
|
inputSchema: z.object({
|
|
132
132
|
host: z
|
|
133
133
|
.string()
|
|
@@ -19,7 +19,6 @@ export const trackingOptOutOutput = z.object({
|
|
|
19
19
|
export const removedTrackingOptOutOutput = z.object({
|
|
20
20
|
address: z.string().describe('The address taken off the list.'),
|
|
21
21
|
});
|
|
22
|
-
const NOT_OPEN_YET = 'Tracking is not open to accounts yet, so the list changes nothing until it is.';
|
|
23
22
|
export const listTrackingOptOutsTool = {
|
|
24
23
|
name: 'list_tracking_opt_outs',
|
|
25
24
|
title: 'List the not-tracked addresses',
|
|
@@ -28,7 +27,7 @@ export const listTrackingOptOutsTool = {
|
|
|
28
27
|
operations: ['GET /v1/tracking-opt-outs'],
|
|
29
28
|
register: (server, { connection, targets }) => registerServerTool(server, targets, 'list_tracking_opt_outs', {
|
|
30
29
|
title: 'List the not-tracked addresses',
|
|
31
|
-
description: `Lists the addresses this server never tracks, on any of its streams, newest first. An entry whose address is null was erased, and only a keyed hash of it remains
|
|
30
|
+
description: `Lists the addresses this server never tracks, on any of its streams, newest first. An entry whose address is null was erased, and only a keyed hash of it remains.`,
|
|
32
31
|
inputSchema: z.object({
|
|
33
32
|
limit: z
|
|
34
33
|
.number()
|
|
@@ -68,7 +67,7 @@ export const addTrackingOptOutTool = {
|
|
|
68
67
|
operations: ['POST /v1/tracking-opt-outs'],
|
|
69
68
|
register: (server, { connection, targets }) => registerServerTool(server, targets, 'add_tracking_opt_out', {
|
|
70
69
|
title: 'Add a not-tracked address',
|
|
71
|
-
description: `Puts an address on this server's not-tracked list. New mail to it goes untracked, and its later opens and clicks are not recorded, from mail already sent too. An address already on the list changes nothing, and the answer is its entry as it stands
|
|
70
|
+
description: `Puts an address on this server's not-tracked list. New mail to it goes untracked, and its later opens and clicks are not recorded, from mail already sent too. An address already on the list changes nothing, and the answer is its entry as it stands.`,
|
|
72
71
|
inputSchema: z.object({
|
|
73
72
|
address: z.email().describe('The address never to track.'),
|
|
74
73
|
}),
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** This package's version, held equal to its package.json by a test. */
|
|
2
|
-
export const MCP_VERSION = '1.
|
|
2
|
+
export const MCP_VERSION = '1.14.0';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sendora/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.14.0",
|
|
4
4
|
"description": "The official MCP server for Sendora: its documentation and API for coding agents.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@modelcontextprotocol/server": "^2.1.0",
|
|
27
27
|
"zod": "^4.6.2",
|
|
28
|
-
"@sendora/sdk": "^5.
|
|
28
|
+
"@sendora/sdk": "^5.6.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@anthropic-ai/mcpb": "2.1.2",
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"fflate": "^0.8.3",
|
|
40
40
|
"typescript": "~7.0.2",
|
|
41
41
|
"vitest": "^4.1.11",
|
|
42
|
+
"@sendora/api": "0.0.0",
|
|
42
43
|
"@sendora/db": "0.0.0",
|
|
43
44
|
"@sendora/domain": "0.0.0",
|
|
44
|
-
"@sendora/api": "0.0.0",
|
|
45
45
|
"@sendora/observability": "0.0.0",
|
|
46
46
|
"@sendora/site": "0.0.0"
|
|
47
47
|
},
|