@sendinel/mcp-server 1.0.53 → 1.0.54

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/README.md CHANGED
@@ -12,7 +12,7 @@ AI-controlled email operations control plane for campaigns, contacts, segments,
12
12
 
13
13
  ## Tool groups
14
14
 
15
- Sendinel currently exposes 34 tool groups and 321 tools (gateway mode adds 3 meta-tools). These counts are checked against the tool registry in CI, so this table matches what ships.
15
+ Sendinel currently exposes 34 tool groups and 322 tools (gateway mode adds 3 meta-tools). These counts are checked against the tool registry in CI, so this table matches what ships.
16
16
 
17
17
  | Group | Count | Purpose |
18
18
  |-------|-------|---------|
@@ -38,7 +38,7 @@ Sendinel currently exposes 34 tool groups and 321 tools (gateway mode adds 3 met
38
38
  | `landing-pages` | 5 | Landing page CRUD |
39
39
  | `lists` | 7 | Static contact lists and membership management |
40
40
  | `newsletters` | 12 | Newsletter publications, issues, subscribers, scheduling, sending, stats |
41
- | `org` | 22 | Team members, plan usage/limits, audit log, model registry, white-label, support tickets, provider switching |
41
+ | `org` | 23 | Team members, plan usage/limits, audit log, model registry, white-label, support tickets, provider switching |
42
42
  | `segments` | 6 | Audience builder: create, edit, natural-language generation, preview |
43
43
  | `short-links` | 3 | Short links, click stats, QR codes |
44
44
  | `signatures` | 4 | Sending signature blocks |
package/build/server.js CHANGED
@@ -160,6 +160,7 @@ const ADMIN_TOOLS = new Set([
160
160
  'delete_signature',
161
161
  'merge_subscribers', 'delete_webhook_subscription',
162
162
  'set_white_label_settings', 'add_white_label_domain',
163
+ 'post_ticket_reply',
163
164
  ]);
164
165
  const SCOPE_HIERARCHY = { read: 1, write: 2, admin: 3 };
165
166
  export function getRequiredScope(name) {
@@ -882,6 +882,24 @@ export function registerOrgTools(server) {
882
882
  });
883
883
  return result.ok ? j(result.data) : j({ error: result.error });
884
884
  });
885
+ server.registerTool('post_ticket_reply', {
886
+ title: 'Post Approved Ticket Reply',
887
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
888
+ description: 'Post the exact Kevin-approved reply to a support ticket. Platform-admin only; requires an approval reference and SHA-256 of the exact body. Does not email or resolve the ticket.',
889
+ inputSchema: {
890
+ ticket_ref: z.string().regex(/^SND-\d+$/i),
891
+ body: z.string().min(1),
892
+ approval_ref: z.string().min(1),
893
+ body_sha256: z.string(),
894
+ reopen: z.boolean().optional(),
895
+ },
896
+ }, async ({ ticket_ref, body, approval_ref, body_sha256, reopen }) => {
897
+ const result = await callSendinelV1(`/api/v1/support/tickets/${encodeURIComponent(ticket_ref)}/reply`, {
898
+ method: 'POST',
899
+ body: { body, approval_ref, body_sha256, reopen },
900
+ });
901
+ return result.ok ? j(result.data) : j({ error: result.error });
902
+ });
885
903
  server.registerTool('start_provider_switch', {
886
904
  title: 'Start Provider Switch',
887
905
  annotations: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendinel/mcp-server",
3
- "version": "1.0.53",
3
+ "version": "1.0.54",
4
4
  "description": "AI-controlled email operations control plane for campaigns, contacts, segments, analytics, and multi-provider sending via MCP.",
5
5
  "mcpName": "ai.sendinel/mcp-server",
6
6
  "type": "module",