@coldbirds/mcp-server 1.0.2 → 1.0.5

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.
@@ -24,6 +24,84 @@
24
24
  }
25
25
  },
26
26
  "tools": [
27
+ {
28
+ "name": "get_dashboard",
29
+ "title": "Get Dashboard",
30
+ "description": "Returns the high-level account dashboard: active campaign count, sends today, 7-day open/reply/bounce rates, a 14-day daily-send series, and the top 5 campaigns by sent volume. Use this for 'how is my outreach doing?' style questions.",
31
+ "inputSchema": {
32
+ "type": "object",
33
+ "properties": {
34
+ "timezone": {
35
+ "type": "string",
36
+ "description": "IANA timezone (e.g. America/New_York) used to compute the 'sends today' boundary. Defaults to the account's preference, or UTC."
37
+ }
38
+ },
39
+ "additionalProperties": false
40
+ },
41
+ "outputSchema": {
42
+ "type": "object",
43
+ "properties": {
44
+ "activeCampaigns": { "type": "integer", "description": "Campaigns currently in ACTIVE status." },
45
+ "sendsToday": { "type": "integer", "description": "Emails sent since local midnight." },
46
+ "sentLast7d": { "type": "integer" },
47
+ "repliedLast7d": { "type": "integer", "description": "Distinct send jobs with at least one reply (last 7d)." },
48
+ "openedLast7d": { "type": "integer", "description": "Distinct send jobs with at least one open (last 7d)." },
49
+ "bouncedLast7d": { "type": "integer" },
50
+ "replyRate": { "type": "number", "description": "repliedLast7d / sentLast7d (0..1)." },
51
+ "openRate": { "type": "number", "description": "openedLast7d / sentLast7d (0..1)." },
52
+ "dailySends": {
53
+ "type": "array",
54
+ "description": "14 daily buckets, oldest first.",
55
+ "items": {
56
+ "type": "object",
57
+ "properties": {
58
+ "date": { "type": "string", "description": "UTC YYYY-MM-DD." },
59
+ "sent": { "type": "integer" },
60
+ "replied": { "type": "integer" }
61
+ },
62
+ "required": ["date", "sent", "replied"]
63
+ }
64
+ },
65
+ "topCampaigns": {
66
+ "type": "array",
67
+ "description": "Up to 5 campaigns ranked by sent volume in the last 7d.",
68
+ "items": {
69
+ "type": "object",
70
+ "properties": {
71
+ "id": { "type": "string" },
72
+ "name": { "type": "string" },
73
+ "sent": { "type": "integer" },
74
+ "opened": { "type": "integer" },
75
+ "replied": { "type": "integer" }
76
+ },
77
+ "required": ["id", "name", "sent", "opened", "replied"]
78
+ }
79
+ }
80
+ },
81
+ "required": [
82
+ "activeCampaigns",
83
+ "sendsToday",
84
+ "sentLast7d",
85
+ "repliedLast7d",
86
+ "openedLast7d",
87
+ "bouncedLast7d",
88
+ "replyRate",
89
+ "openRate",
90
+ "dailySends",
91
+ "topCampaigns"
92
+ ]
93
+ },
94
+ "annotations": {
95
+ "readOnlyHint": true,
96
+ "destructiveHint": false,
97
+ "idempotentHint": true,
98
+ "openWorldHint": false
99
+ },
100
+ "_http": {
101
+ "method": "GET",
102
+ "path": "/api/v1/dashboard"
103
+ }
104
+ },
27
105
  {
28
106
  "name": "get_account",
29
107
  "title": "Get Account",
@@ -1269,9 +1347,60 @@
1269
1347
  {
1270
1348
  "name": "list_mailboxes",
1271
1349
  "title": "List Mailboxes",
1272
- "description": "Lists all sender mailboxes connected to the account.",
1350
+ "description": "Lists sender mailboxes connected to the account. Supports filtering by status, provider, label, warmup state, connection health (SMTP/IMAP), DNS issues, and free-text search across email + display name. Cursor-paginated — pass the returned nextCursor to fetch the next page.",
1273
1351
  "inputSchema": {
1274
1352
  "type": "object",
1353
+ "properties": {
1354
+ "cursor": {
1355
+ "type": "string",
1356
+ "description": "Pagination cursor from the previous response's nextCursor."
1357
+ },
1358
+ "limit": {
1359
+ "type": "integer",
1360
+ "minimum": 1,
1361
+ "maximum": 100,
1362
+ "default": 25,
1363
+ "description": "Number of mailboxes to return per page."
1364
+ },
1365
+ "search": {
1366
+ "type": "string",
1367
+ "description": "Case-insensitive substring match on email address or display name."
1368
+ },
1369
+ "labelId": {
1370
+ "type": "string",
1371
+ "description": "Filter to a single label."
1372
+ },
1373
+ "provider": {
1374
+ "type": "string",
1375
+ "description": "Comma-separated provider list. Allowed values: GSUITE, MICROSOFT365, SMTP."
1376
+ },
1377
+ "status": {
1378
+ "type": "string",
1379
+ "description": "Comma-separated mailbox status list. Allowed values: ACTIVE, PAUSED, DISCONNECTED, SUSPENDED, DISGARDED."
1380
+ },
1381
+ "warmupEnabled": {
1382
+ "type": "boolean",
1383
+ "description": "Filter by warmup-enabled flag."
1384
+ },
1385
+ "isWarmupSeed": {
1386
+ "type": "boolean",
1387
+ "description": "Filter by warmup-seed flag."
1388
+ },
1389
+ "smtp": {
1390
+ "type": "string",
1391
+ "enum": ["ok", "failed"],
1392
+ "description": "SMTP connection health filter."
1393
+ },
1394
+ "imap": {
1395
+ "type": "string",
1396
+ "enum": ["ok", "failed"],
1397
+ "description": "IMAP connection health filter."
1398
+ },
1399
+ "dnsIssues": {
1400
+ "type": "string",
1401
+ "description": "Comma-separated DNS records flagged as missing or broken. Allowed values: mx, spf, dkim, a."
1402
+ }
1403
+ },
1275
1404
  "additionalProperties": false
1276
1405
  },
1277
1406
  "outputSchema": {
@@ -1282,48 +1411,44 @@
1282
1411
  "items": {
1283
1412
  "type": "object",
1284
1413
  "properties": {
1285
- "id": {
1286
- "type": "string"
1287
- },
1288
- "emailAddress": {
1289
- "type": "string",
1290
- "format": "email"
1291
- },
1292
- "displayName": {
1293
- "type": [
1294
- "string",
1295
- "null"
1296
- ]
1297
- },
1414
+ "id": { "type": "string" },
1415
+ "emailAddress": { "type": "string", "format": "email" },
1416
+ "displayName": { "type": ["string", "null"] },
1298
1417
  "provider": {
1299
1418
  "type": "string",
1300
- "enum": [
1301
- "GOOGLE",
1302
- "MICROSOFT",
1303
- "SMTP"
1304
- ]
1419
+ "enum": ["GSUITE", "MICROSOFT365", "SMTP"]
1305
1420
  },
1306
1421
  "status": {
1307
- "type": "string"
1308
- },
1309
- "createdAt": {
1310
1422
  "type": "string",
1311
- "format": "date-time"
1312
- }
1423
+ "enum": ["ACTIVE", "PAUSED", "DISCONNECTED", "SUSPENDED", "DISGARDED"]
1424
+ },
1425
+ "labelId": { "type": ["string", "null"] },
1426
+ "isWarmupSeed": { "type": "boolean" },
1427
+ "warmupEnabled": { "type": "boolean" },
1428
+ "warmupLastSendAt": { "type": ["string", "null"], "format": "date-time" },
1429
+ "smtpOk": { "type": ["boolean", "null"] },
1430
+ "imapOk": { "type": ["boolean", "null"] },
1431
+ "dnsMxOk": { "type": ["boolean", "null"] },
1432
+ "dnsSpfOk": { "type": ["boolean", "null"] },
1433
+ "dnsDkimOk": { "type": ["boolean", "null"] },
1434
+ "dnsRecordOk": { "type": ["boolean", "null"] },
1435
+ "connectionFailCount": { "type": "integer" },
1436
+ "createdAt": { "type": "string", "format": "date-time" },
1437
+ "updatedAt": { "type": "string", "format": "date-time" }
1313
1438
  },
1314
- "required": [
1315
- "id",
1316
- "emailAddress",
1317
- "provider",
1318
- "status",
1319
- "createdAt"
1320
- ]
1439
+ "required": ["id", "emailAddress", "provider", "status", "createdAt", "updatedAt"]
1321
1440
  }
1441
+ },
1442
+ "pagination": {
1443
+ "type": "object",
1444
+ "properties": {
1445
+ "nextCursor": { "type": ["string", "null"] },
1446
+ "hasMore": { "type": "boolean" }
1447
+ },
1448
+ "required": ["nextCursor", "hasMore"]
1322
1449
  }
1323
1450
  },
1324
- "required": [
1325
- "data"
1326
- ]
1451
+ "required": ["data"]
1327
1452
  },
1328
1453
  "annotations": {
1329
1454
  "readOnlyHint": true,
@@ -1719,6 +1844,291 @@
1719
1844
  "path": "/api/v1/mailboxes/{id}"
1720
1845
  }
1721
1846
  },
1847
+ {
1848
+ "name": "get_mailbox_warmup",
1849
+ "title": "Get Mailbox Warmup Analytics",
1850
+ "description": "Returns warmup performance analytics for a single mailbox: today's score, trailing-window score, day-over-day delta, daily counters (sent / delivered / spam / rescued / bounced / opened / replied / marked), and per-ESP placement stats. Use this to diagnose why a mailbox's warmup is degrading.",
1851
+ "inputSchema": {
1852
+ "type": "object",
1853
+ "properties": {
1854
+ "id": {
1855
+ "type": "string",
1856
+ "description": "Mailbox ID."
1857
+ },
1858
+ "windowDays": {
1859
+ "type": "integer",
1860
+ "minimum": 1,
1861
+ "maximum": 90,
1862
+ "description": "Trailing window in days for daily counters and trailing score (default 30)."
1863
+ }
1864
+ },
1865
+ "required": ["id"],
1866
+ "additionalProperties": false
1867
+ },
1868
+ "outputSchema": {
1869
+ "type": "object",
1870
+ "properties": {
1871
+ "mailboxId": { "type": "string" },
1872
+ "windowDays": { "type": "integer" },
1873
+ "today": {
1874
+ "type": "object",
1875
+ "properties": {
1876
+ "score": { "type": "integer" },
1877
+ "placementRate": { "type": "number" },
1878
+ "replyRate": { "type": "number" },
1879
+ "openRate": { "type": "number" },
1880
+ "markRate": { "type": "number" },
1881
+ "bounceRate": { "type": "number" },
1882
+ "placed": { "type": "integer" }
1883
+ }
1884
+ },
1885
+ "trailing": {
1886
+ "type": "object",
1887
+ "properties": {
1888
+ "score": { "type": "integer" },
1889
+ "placementRate": { "type": "number" },
1890
+ "replyRate": { "type": "number" },
1891
+ "openRate": { "type": "number" },
1892
+ "markRate": { "type": "number" },
1893
+ "bounceRate": { "type": "number" },
1894
+ "placed": { "type": "integer" }
1895
+ }
1896
+ },
1897
+ "yesterday": {
1898
+ "type": "object",
1899
+ "properties": {
1900
+ "score": { "type": "integer" }
1901
+ }
1902
+ },
1903
+ "delta": { "type": "integer" },
1904
+ "daily": {
1905
+ "type": "array",
1906
+ "items": {
1907
+ "type": "object",
1908
+ "properties": {
1909
+ "day": { "type": "string", "format": "date-time" },
1910
+ "sent": { "type": "integer" },
1911
+ "delivered": { "type": "integer" },
1912
+ "landedSpam": { "type": "integer" },
1913
+ "rescued": { "type": "integer" },
1914
+ "bounced": { "type": "integer" },
1915
+ "opened": { "type": "integer" },
1916
+ "replied": { "type": "integer" },
1917
+ "marked": { "type": "integer" }
1918
+ }
1919
+ }
1920
+ },
1921
+ "espStats": {
1922
+ "type": "array",
1923
+ "items": {
1924
+ "type": "object",
1925
+ "properties": {
1926
+ "esp": { "type": "string", "enum": ["GMAIL", "OUTLOOK", "OTHER"] },
1927
+ "delivered": { "type": "integer" },
1928
+ "landedSpam": { "type": "integer" },
1929
+ "rescued": { "type": "integer" },
1930
+ "overridden": { "type": "integer" }
1931
+ }
1932
+ }
1933
+ }
1934
+ },
1935
+ "required": ["mailboxId", "windowDays", "today", "trailing", "delta", "daily", "espStats"]
1936
+ },
1937
+ "annotations": {
1938
+ "readOnlyHint": true,
1939
+ "destructiveHint": false,
1940
+ "idempotentHint": true,
1941
+ "openWorldHint": false
1942
+ },
1943
+ "_http": {
1944
+ "method": "GET",
1945
+ "path": "/api/v1/mailboxes/{id}/warmup"
1946
+ }
1947
+ },
1948
+ {
1949
+ "name": "list_labels",
1950
+ "title": "List Mailbox Labels",
1951
+ "description": "Lists all mailbox labels for the account along with each label's mailbox count. Labels group mailboxes (e.g. by client, by domain, by campaign theme) for filtering and warmup analytics.",
1952
+ "inputSchema": {
1953
+ "type": "object",
1954
+ "additionalProperties": false
1955
+ },
1956
+ "outputSchema": {
1957
+ "type": "object",
1958
+ "properties": {
1959
+ "data": {
1960
+ "type": "array",
1961
+ "items": {
1962
+ "type": "object",
1963
+ "properties": {
1964
+ "id": { "type": "string" },
1965
+ "name": { "type": "string" },
1966
+ "mailboxCount": { "type": "integer" },
1967
+ "createdAt": { "type": "string", "format": "date-time" },
1968
+ "updatedAt": { "type": "string", "format": "date-time" }
1969
+ },
1970
+ "required": ["id", "name", "mailboxCount", "createdAt", "updatedAt"]
1971
+ }
1972
+ }
1973
+ },
1974
+ "required": ["data"]
1975
+ },
1976
+ "annotations": {
1977
+ "readOnlyHint": true,
1978
+ "destructiveHint": false,
1979
+ "idempotentHint": true,
1980
+ "openWorldHint": false
1981
+ },
1982
+ "_http": {
1983
+ "method": "GET",
1984
+ "path": "/api/v1/labels"
1985
+ }
1986
+ },
1987
+ {
1988
+ "name": "create_label",
1989
+ "title": "Create Mailbox Label",
1990
+ "description": "Creates a new mailbox label. Label names must be unique per account (case-insensitive).",
1991
+ "inputSchema": {
1992
+ "type": "object",
1993
+ "properties": {
1994
+ "name": {
1995
+ "type": "string",
1996
+ "minLength": 1,
1997
+ "maxLength": 80,
1998
+ "description": "Label name. Must be unique within the account."
1999
+ }
2000
+ },
2001
+ "required": ["name"],
2002
+ "additionalProperties": false
2003
+ },
2004
+ "outputSchema": {
2005
+ "type": "object",
2006
+ "properties": {
2007
+ "id": { "type": "string" },
2008
+ "name": { "type": "string" },
2009
+ "mailboxCount": { "type": "integer" },
2010
+ "createdAt": { "type": "string", "format": "date-time" },
2011
+ "updatedAt": { "type": "string", "format": "date-time" }
2012
+ },
2013
+ "required": ["id", "name", "createdAt", "updatedAt"]
2014
+ },
2015
+ "annotations": {
2016
+ "readOnlyHint": false,
2017
+ "destructiveHint": false,
2018
+ "idempotentHint": false,
2019
+ "openWorldHint": false
2020
+ },
2021
+ "_http": {
2022
+ "method": "POST",
2023
+ "path": "/api/v1/labels"
2024
+ }
2025
+ },
2026
+ {
2027
+ "name": "update_label",
2028
+ "title": "Rename Mailbox Label",
2029
+ "description": "Renames an existing mailbox label. Returns 409 if the new name collides with another label.",
2030
+ "inputSchema": {
2031
+ "type": "object",
2032
+ "properties": {
2033
+ "id": {
2034
+ "type": "string",
2035
+ "description": "Label ID to rename."
2036
+ },
2037
+ "name": {
2038
+ "type": "string",
2039
+ "minLength": 1,
2040
+ "maxLength": 80,
2041
+ "description": "New label name."
2042
+ }
2043
+ },
2044
+ "required": ["id", "name"],
2045
+ "additionalProperties": false
2046
+ },
2047
+ "outputSchema": {
2048
+ "type": "object",
2049
+ "properties": {
2050
+ "id": { "type": "string" },
2051
+ "name": { "type": "string" },
2052
+ "mailboxCount": { "type": "integer" },
2053
+ "createdAt": { "type": "string", "format": "date-time" },
2054
+ "updatedAt": { "type": "string", "format": "date-time" }
2055
+ },
2056
+ "required": ["id", "name", "createdAt", "updatedAt"]
2057
+ },
2058
+ "annotations": {
2059
+ "readOnlyHint": false,
2060
+ "destructiveHint": false,
2061
+ "idempotentHint": true,
2062
+ "openWorldHint": false
2063
+ },
2064
+ "_http": {
2065
+ "method": "PATCH",
2066
+ "path": "/api/v1/labels/{id}"
2067
+ }
2068
+ },
2069
+ {
2070
+ "name": "delete_label",
2071
+ "title": "Delete Mailbox Label",
2072
+ "description": "Deletes a mailbox label. Mailboxes that were tagged with this label are unassigned (not deleted). Returns no body on success.",
2073
+ "inputSchema": {
2074
+ "type": "object",
2075
+ "properties": {
2076
+ "id": {
2077
+ "type": "string",
2078
+ "description": "Label ID to delete."
2079
+ }
2080
+ },
2081
+ "required": ["id"],
2082
+ "additionalProperties": false
2083
+ },
2084
+ "annotations": {
2085
+ "readOnlyHint": false,
2086
+ "destructiveHint": true,
2087
+ "idempotentHint": true,
2088
+ "openWorldHint": false
2089
+ },
2090
+ "_http": {
2091
+ "method": "DELETE",
2092
+ "path": "/api/v1/labels/{id}"
2093
+ }
2094
+ },
2095
+ {
2096
+ "name": "get_label_warmup",
2097
+ "title": "Get Label Warmup Analytics",
2098
+ "description": "Returns aggregated warmup analytics for every mailbox inside a label: headline KPIs (inbox placement %, median score, bounce rate, 24h volume), red-flag alerts (no-sends, score drop, bounce spike, connection failures, seed degradation), daily counter rollup, per-ESP breakdown, sender-provider mix, and per-mailbox worklist for triage. Use this for fleet-level analysis.",
2099
+ "inputSchema": {
2100
+ "type": "object",
2101
+ "properties": {
2102
+ "id": {
2103
+ "type": "string",
2104
+ "description": "Label ID."
2105
+ },
2106
+ "maturity": {
2107
+ "type": "string",
2108
+ "enum": ["all", "mature", "new", "seeds"],
2109
+ "description": "Restrict the analytics population: `all` (default) includes every mailbox, `mature` only mailboxes warming for 14+ days, `new` mailboxes warming under 14 days, `seeds` only seed mailboxes."
2110
+ },
2111
+ "windowDays": {
2112
+ "type": "integer",
2113
+ "minimum": 1,
2114
+ "maximum": 90,
2115
+ "description": "Trailing window in days for daily counters and scoring (default 30)."
2116
+ }
2117
+ },
2118
+ "required": ["id"],
2119
+ "additionalProperties": false
2120
+ },
2121
+ "annotations": {
2122
+ "readOnlyHint": true,
2123
+ "destructiveHint": false,
2124
+ "idempotentHint": true,
2125
+ "openWorldHint": false
2126
+ },
2127
+ "_http": {
2128
+ "method": "GET",
2129
+ "path": "/api/v1/labels/{id}/warmup"
2130
+ }
2131
+ },
1722
2132
  {
1723
2133
  "title": "List Events",
1724
2134
  "description": "Lists tracked email events (SENT, OPENED, CLICKED, REPLIED, BOUNCED, etc.) with optional filters. Supports cursor-based pagination.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coldbirds/mcp-server",
3
- "version": "1.0.2",
3
+ "version": "1.0.5",
4
4
  "description": "MCP server for ColdBirds Sequence — control campaigns, contacts, and mailboxes from AI assistants like Claude Desktop, Cursor, and Windsurf.",
5
5
  "keywords": [
6
6
  "coldbirds",
@@ -37,7 +37,11 @@
37
37
  "lint": "eslint src",
38
38
  "test": "jest --config jest.config.cjs",
39
39
  "test:coverage": "jest --config jest.config.cjs --coverage",
40
- "prepublishOnly": "npm run build && npm run lint && npm test"
40
+ "prepublishOnly": "npm run build && npm run lint && npm test",
41
+ "release:patch": "npm version patch --no-git-tag-version && npm run release:tag",
42
+ "release:minor": "npm version minor --no-git-tag-version && npm run release:tag",
43
+ "release:major": "npm version major --no-git-tag-version && npm run release:tag",
44
+ "release:tag": "bash scripts/release-tag.sh"
41
45
  },
42
46
  "dependencies": {
43
47
  "@modelcontextprotocol/sdk": "^1.12.1",