@honkio/mcp 1.4.0 → 1.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/README.md +193 -65
- package/dist/auth.d.ts +40 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +98 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +43 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +97 -22
- package/dist/client.js.map +1 -1
- package/dist/http.d.ts +51 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +248 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -46
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +10 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +10 -0
- package/dist/log.js.map +1 -0
- package/dist/prompts.d.ts +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +23 -23
- package/dist/prompts.js.map +1 -1
- package/dist/rateLimit.d.ts +50 -0
- package/dist/rateLimit.d.ts.map +1 -0
- package/dist/rateLimit.js +85 -0
- package/dist/rateLimit.js.map +1 -0
- package/dist/resources.d.ts +1 -1
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +4 -4
- package/dist/resources.js.map +1 -1
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +46 -0
- package/dist/server.js.map +1 -0
- package/dist/toolMeta.d.ts +20 -0
- package/dist/toolMeta.d.ts.map +1 -0
- package/dist/toolMeta.js +81 -0
- package/dist/toolMeta.js.map +1 -0
- package/dist/tools.d.ts +10 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +344 -209
- package/dist/tools.js.map +1 -1
- package/package.json +16 -7
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The caller's address as seen through `trustedProxies` hops. Each trusted
|
|
3
|
+
* proxy appends its own address to X-Forwarded-For (Railway's edge appends
|
|
4
|
+
* one, verified 2026-09-05: a request arrives as "<client>, <edge>"), so the
|
|
5
|
+
* client is the entry that many places left of the right end. Anything a
|
|
6
|
+
* client writes into the header itself lands further left and is ignored.
|
|
7
|
+
* With fewer entries than hops (a local run with no proxy) the leftmost
|
|
8
|
+
* entry is used; with no header at all, the socket address.
|
|
9
|
+
*/
|
|
10
|
+
export function clientIp(req, trustedProxies = 1) {
|
|
11
|
+
const xff = req.headers['x-forwarded-for'];
|
|
12
|
+
const raw = Array.isArray(xff) ? xff.join(',') : xff;
|
|
13
|
+
if (typeof raw === 'string') {
|
|
14
|
+
const parts = raw.split(',').map((s) => s.trim()).filter(Boolean);
|
|
15
|
+
if (parts.length > 0) {
|
|
16
|
+
const index = Math.max(0, parts.length - 1 - trustedProxies);
|
|
17
|
+
return parts[index] ?? parts[0];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return req.socket?.remoteAddress ?? 'unknown';
|
|
21
|
+
}
|
|
22
|
+
export class RateLimiter {
|
|
23
|
+
buckets = new Map();
|
|
24
|
+
limit;
|
|
25
|
+
windowMs;
|
|
26
|
+
maxEntries;
|
|
27
|
+
now;
|
|
28
|
+
lastPrune;
|
|
29
|
+
constructor(opts) {
|
|
30
|
+
this.limit = opts.limit;
|
|
31
|
+
this.windowMs = opts.windowMs ?? 60_000;
|
|
32
|
+
this.maxEntries = opts.maxEntries ?? 10_000;
|
|
33
|
+
this.now = opts.now ?? Date.now;
|
|
34
|
+
this.lastPrune = this.now();
|
|
35
|
+
}
|
|
36
|
+
get size() {
|
|
37
|
+
return this.buckets.size;
|
|
38
|
+
}
|
|
39
|
+
/** Counts one event for the key and says whether it stayed within the limit. */
|
|
40
|
+
hit(key) {
|
|
41
|
+
const now = this.now();
|
|
42
|
+
const bucket = this.bucket(key, now);
|
|
43
|
+
bucket.count += 1;
|
|
44
|
+
return this.verdict(bucket, bucket.count <= this.limit, now);
|
|
45
|
+
}
|
|
46
|
+
/** Whether the key is already at the limit, without counting anything. */
|
|
47
|
+
blocked(key) {
|
|
48
|
+
const now = this.now();
|
|
49
|
+
const existing = this.buckets.get(key);
|
|
50
|
+
if (!existing || now - existing.windowStart >= this.windowMs)
|
|
51
|
+
return { allowed: true, retryAfterSec: 0 };
|
|
52
|
+
return this.verdict(existing, existing.count < this.limit, now);
|
|
53
|
+
}
|
|
54
|
+
verdict(bucket, allowed, now) {
|
|
55
|
+
const retryAfterSec = allowed ? 0 : Math.max(1, Math.ceil((bucket.windowStart + this.windowMs - now) / 1000));
|
|
56
|
+
return { allowed, retryAfterSec };
|
|
57
|
+
}
|
|
58
|
+
bucket(key, now) {
|
|
59
|
+
if (now - this.lastPrune >= this.windowMs)
|
|
60
|
+
this.prune(now);
|
|
61
|
+
let bucket = this.buckets.get(key);
|
|
62
|
+
if (bucket && now - bucket.windowStart >= this.windowMs) {
|
|
63
|
+
bucket.windowStart = now;
|
|
64
|
+
bucket.count = 0;
|
|
65
|
+
}
|
|
66
|
+
if (!bucket) {
|
|
67
|
+
if (this.buckets.size >= this.maxEntries) {
|
|
68
|
+
const oldest = this.buckets.keys().next().value;
|
|
69
|
+
if (oldest !== undefined)
|
|
70
|
+
this.buckets.delete(oldest);
|
|
71
|
+
}
|
|
72
|
+
bucket = { windowStart: now, count: 0 };
|
|
73
|
+
this.buckets.set(key, bucket);
|
|
74
|
+
}
|
|
75
|
+
return bucket;
|
|
76
|
+
}
|
|
77
|
+
prune(now) {
|
|
78
|
+
this.lastPrune = now;
|
|
79
|
+
for (const [key, bucket] of this.buckets) {
|
|
80
|
+
if (now - bucket.windowStart >= this.windowMs)
|
|
81
|
+
this.buckets.delete(key);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=rateLimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../src/rateLimit.ts"],"names":[],"mappings":"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"}
|
package/dist/resources.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { McpServer } from
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/server";
|
|
2
2
|
import { type HonkioClient } from './client.js';
|
|
3
3
|
export declare function registerResources(server: McpServer, client: HonkioClient): void;
|
|
4
4
|
//# sourceMappingURL=resources.d.ts.map
|
package/dist/resources.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,aAAa,CAAC;AAE7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAgH/E"}
|
package/dist/resources.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HonkioError } from './client.js';
|
|
2
2
|
export function registerResources(server, client) {
|
|
3
3
|
// honkio://messages — paginated list of messages
|
|
4
|
-
server.
|
|
4
|
+
server.registerResource('messages', 'honkio://messages', { description: 'Recent SMS messages (up to 20)' }, async (uri) => {
|
|
5
5
|
try {
|
|
6
6
|
const result = await client.listMessages({ limit: 20 });
|
|
7
7
|
return {
|
|
@@ -24,7 +24,7 @@ export function registerResources(server, client) {
|
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
26
|
// honkio://phone-numbers — list of provisioned numbers
|
|
27
|
-
server.
|
|
27
|
+
server.registerResource('phone-numbers', 'honkio://phone-numbers', { description: 'Phone numbers provisioned on your account' }, async (uri) => {
|
|
28
28
|
try {
|
|
29
29
|
const result = await client.listPhoneNumbers();
|
|
30
30
|
return {
|
|
@@ -47,7 +47,7 @@ export function registerResources(server, client) {
|
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
// honkio://consents — active CASL consents
|
|
50
|
-
server.
|
|
50
|
+
server.registerResource('consents', 'honkio://consents', { description: 'Active CASL consent records (up to 20)' }, async (uri) => {
|
|
51
51
|
try {
|
|
52
52
|
const result = await client.listConsents({ status: 'ACTIVE', limit: 20 });
|
|
53
53
|
return {
|
|
@@ -70,7 +70,7 @@ export function registerResources(server, client) {
|
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
72
|
// honkio://webhooks — registered webhooks
|
|
73
|
-
server.
|
|
73
|
+
server.registerResource('webhooks', 'honkio://webhooks', { description: 'Registered webhook endpoints for your account' }, async (uri) => {
|
|
74
74
|
try {
|
|
75
75
|
const result = await client.listWebhooks();
|
|
76
76
|
return {
|
package/dist/resources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,WAAW,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,MAAoB;IACvE,iDAAiD;IACjD,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/server';
|
|
2
|
+
import type { HonkioClient } from './client.js';
|
|
3
|
+
export declare const PACKAGE_VERSION: string;
|
|
4
|
+
/** Sent to clients that surface server instructions (Gemini CLI, Claude). Plain facts an agent needs before its first call. */
|
|
5
|
+
export declare const INSTRUCTIONS: string;
|
|
6
|
+
export declare function buildServer(client: HonkioClient): McpServer;
|
|
7
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhD,eAAO,MAAM,eAAe,EAAE,MAO1B,CAAC;AAKL,+HAA+H;AAC/H,eAAO,MAAM,YAAY,QAMd,CAAC;AAEZ,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAgB3D"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One factory for every transport. The stdio bin and the HTTP entry both call
|
|
3
|
+
* buildServer, so the two can never advertise different tools.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync } from 'node:fs';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { dirname, resolve } from 'node:path';
|
|
8
|
+
import { McpServer } from '@modelcontextprotocol/server';
|
|
9
|
+
import { registerTools } from './tools.js';
|
|
10
|
+
import { registerResources } from './resources.js';
|
|
11
|
+
import { registerPrompts } from './prompts.js';
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
export const PACKAGE_VERSION = (() => {
|
|
14
|
+
try {
|
|
15
|
+
const pkg = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));
|
|
16
|
+
return pkg.version ?? 'unknown';
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return 'unknown';
|
|
20
|
+
}
|
|
21
|
+
})();
|
|
22
|
+
/** Lists change only on a deploy; let clients keep them for five minutes. */
|
|
23
|
+
const LIST_CACHE = { ttlMs: 5 * 60_000, cacheScope: 'private' };
|
|
24
|
+
/** Sent to clients that surface server instructions (Gemini CLI, Claude). Plain facts an agent needs before its first call. */
|
|
25
|
+
export const INSTRUCTIONS = [
|
|
26
|
+
'HonkIO is a Canadian SMS API. These tools act on the HonkIO account you signed in with, or whose API key you were configured with.',
|
|
27
|
+
'Keys starting with mk_test_ simulate everything for free: sends come back DELIVERED but nothing leaves the building and nothing is charged. Keys starting with mk_live_ send real SMS and spend real money.',
|
|
28
|
+
'Three tools spend money on a live key: send_sms and start_verification charge per SMS part, and provision_phone_number charges a first month plus a one-time activation fee and starts monthly rent. Call get_pricing for current figures, and confirm with the user before buying a number or sending to many recipients.',
|
|
29
|
+
'Commercial messages need CASL consent on file. Use check_consent before send_sms; record_consent stores express or implied consent. A refused send returns an error code such as NO_CONSENT, OPT_OUT_BLOCKED or DAILY_LIMIT_REACHED that explains what to fix.',
|
|
30
|
+
'Phone numbers are E.164 (+1 and ten digits). 555-XXXX exchanges are reserved and refused. Omit account_id on account tools; it is resolved from the key.',
|
|
31
|
+
].join(' ');
|
|
32
|
+
export function buildServer(client) {
|
|
33
|
+
const server = new McpServer({ name: 'honkio', version: PACKAGE_VERSION }, {
|
|
34
|
+
instructions: INSTRUCTIONS,
|
|
35
|
+
cacheHints: {
|
|
36
|
+
'tools/list': LIST_CACHE,
|
|
37
|
+
'prompts/list': LIST_CACHE,
|
|
38
|
+
'resources/list': LIST_CACHE,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
registerTools(server, client);
|
|
42
|
+
registerResources(server, client);
|
|
43
|
+
registerPrompts(server);
|
|
44
|
+
return server;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAW,CAAC,GAAG,EAAE;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAC;QAC5G,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,6EAA6E;AAC7E,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,SAAS,EAAW,CAAC;AAEzE,+HAA+H;AAC/H,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,oIAAoI;IACpI,6MAA6M;IAC7M,4TAA4T;IAC5T,gQAAgQ;IAChQ,0JAA0J;CAC3J,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,EAC5C;QACE,YAAY,EAAE,YAAY;QAC1B,UAAU,EAAE;YACV,YAAY,EAAE,UAAU;YACxB,cAAc,EAAE,UAAU;YAC1B,gBAAgB,EAAE,UAAU;SAC7B;KACF,CACF,CAAC;IACF,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Title and safety hints for every tool. Directory reviews (Anthropic, OpenAI)
|
|
3
|
+
* require them, and clients use the hints to decide when to ask the user
|
|
4
|
+
* before calling. Keep in step with tools.ts; tests/annotations.test.ts fails
|
|
5
|
+
* if a tool is missing here or here without a registration.
|
|
6
|
+
*
|
|
7
|
+
* readOnlyHint reads nothing changes
|
|
8
|
+
* destructiveHint cannot be undone (delete, revoke, release, erase)
|
|
9
|
+
* idempotentHint calling twice with the same arguments has no extra effect
|
|
10
|
+
* openWorldHint reaches a phone in the outside world; spends money on a live key
|
|
11
|
+
*/
|
|
12
|
+
import type { ToolAnnotations } from '@modelcontextprotocol/server';
|
|
13
|
+
export interface ToolMeta {
|
|
14
|
+
title: string;
|
|
15
|
+
annotations: ToolAnnotations;
|
|
16
|
+
}
|
|
17
|
+
export declare const TOOL_META: Record<string, ToolMeta>;
|
|
18
|
+
/** Metadata for a tool; throws at registration time so a missing entry cannot ship. */
|
|
19
|
+
export declare function meta(name: string): ToolMeta;
|
|
20
|
+
//# sourceMappingURL=toolMeta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolMeta.d.ts","sourceRoot":"","sources":["../src/toolMeta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,eAAe,CAAC;CAC9B;AAmBD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAwD9C,CAAC;AAEF,uFAAuF;AACvF,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAI3C"}
|
package/dist/toolMeta.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const read = (title) => ({
|
|
2
|
+
title,
|
|
3
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
4
|
+
});
|
|
5
|
+
const write = (title, opts = {}) => ({
|
|
6
|
+
title,
|
|
7
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: opts.idempotent ?? false, openWorldHint: false },
|
|
8
|
+
});
|
|
9
|
+
const destructive = (title) => ({
|
|
10
|
+
title,
|
|
11
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: false },
|
|
12
|
+
});
|
|
13
|
+
const reachesPhone = (title) => ({
|
|
14
|
+
title,
|
|
15
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
16
|
+
});
|
|
17
|
+
export const TOOL_META = {
|
|
18
|
+
// Messages
|
|
19
|
+
send_sms: reachesPhone('Send SMS'),
|
|
20
|
+
list_messages: read('List messages'),
|
|
21
|
+
get_message: read('Get message'),
|
|
22
|
+
// Phone numbers
|
|
23
|
+
list_area_codes: read('List area codes'),
|
|
24
|
+
search_phone_numbers: read('Search available numbers'),
|
|
25
|
+
provision_phone_number: reachesPhone('Buy phone number'),
|
|
26
|
+
list_phone_numbers: read('List phone numbers'),
|
|
27
|
+
get_phone_number: read('Get phone number'),
|
|
28
|
+
release_phone_number: destructive('Release phone number'),
|
|
29
|
+
request_number_allowance: write('Request phone number allowance'),
|
|
30
|
+
list_number_allowance_requests: read('List phone number allowance requests'),
|
|
31
|
+
// CASL compliance
|
|
32
|
+
record_consent: write('Record consent'),
|
|
33
|
+
list_consents: read('List consents'),
|
|
34
|
+
check_consent: read('Check consent'),
|
|
35
|
+
revoke_consent: destructive('Revoke consent'),
|
|
36
|
+
record_opt_out: write('Record opt-out', { idempotent: true }),
|
|
37
|
+
list_opt_outs: read('List opt-outs'),
|
|
38
|
+
check_dncl: read('Check Do Not Call List'),
|
|
39
|
+
batch_check_dncl: read('Batch check Do Not Call List'),
|
|
40
|
+
request_erasure: destructive('Erase subscriber data'),
|
|
41
|
+
// Pricing
|
|
42
|
+
get_pricing: read('Get pricing'),
|
|
43
|
+
// Verification
|
|
44
|
+
start_verification: reachesPhone('Start phone verification'),
|
|
45
|
+
check_verification: write('Check verification code'),
|
|
46
|
+
get_verification: read('Get verification'),
|
|
47
|
+
list_verifications: read('List verifications'),
|
|
48
|
+
// Webhooks
|
|
49
|
+
create_webhook: write('Create webhook'),
|
|
50
|
+
list_webhooks: read('List webhooks'),
|
|
51
|
+
get_webhook: read('Get webhook'),
|
|
52
|
+
update_webhook: write('Update webhook', { idempotent: true }),
|
|
53
|
+
delete_webhook: destructive('Delete webhook'),
|
|
54
|
+
list_webhook_deliveries: read('List webhook deliveries'),
|
|
55
|
+
reactivate_webhook: write('Reactivate webhook', { idempotent: true }),
|
|
56
|
+
list_webhook_dead_letters: read('List webhook dead letters'),
|
|
57
|
+
replay_webhook_dead_letter: write('Replay webhook dead letter'),
|
|
58
|
+
discard_webhook_dead_letter: destructive('Discard webhook dead letter'),
|
|
59
|
+
// Sending limits
|
|
60
|
+
get_send_limit: read('Get sending limits'),
|
|
61
|
+
request_send_limit: write('Request higher volume'),
|
|
62
|
+
list_send_limit_requests: read('List sending volume requests'),
|
|
63
|
+
get_topup_allowance: read('Get top-up allowance'),
|
|
64
|
+
// Account and keys
|
|
65
|
+
whoami: read('Who am I'),
|
|
66
|
+
get_account: read('Get account'),
|
|
67
|
+
update_account: write('Update account', { idempotent: true }),
|
|
68
|
+
get_usage: read('Get usage'),
|
|
69
|
+
list_transactions: read('List transactions'),
|
|
70
|
+
create_api_key: write('Create API key'),
|
|
71
|
+
revoke_api_key: destructive('Revoke API key'),
|
|
72
|
+
rotate_api_key: destructive('Rotate API key'),
|
|
73
|
+
};
|
|
74
|
+
/** Metadata for a tool; throws at registration time so a missing entry cannot ship. */
|
|
75
|
+
export function meta(name) {
|
|
76
|
+
const m = TOOL_META[name];
|
|
77
|
+
if (!m)
|
|
78
|
+
throw new Error(`No tool metadata for ${name}; add it to toolMeta.ts`);
|
|
79
|
+
return m;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=toolMeta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolMeta.js","sourceRoot":"","sources":["../src/toolMeta.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import { McpServer } from
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/server";
|
|
2
2
|
import { type HonkioClient } from './client.js';
|
|
3
|
+
export declare const WEBHOOK_EVENTS: readonly ["message.queued", "message.sending", "message.sent", "message.delivered", "message.failed", "message.undelivered", "message.received", "opt_out.recorded", "opt_out.reinstated", "account.delivery_warning", "account.sending_paused", "account.spend_warning", "phone_number.suspended", "phone_number.released"];
|
|
4
|
+
export declare const PERMISSION_RESOURCES: readonly ["messages", "phone_numbers", "contacts", "contact_groups", "lists", "compliance", "webhooks", "verify", "account", "api_keys", "emails", "email_domains", "email_suppressions"];
|
|
5
|
+
export declare function formatError(err: unknown): {
|
|
6
|
+
content: [{
|
|
7
|
+
type: 'text';
|
|
8
|
+
text: string;
|
|
9
|
+
}];
|
|
10
|
+
isError: true;
|
|
11
|
+
};
|
|
3
12
|
export declare function registerTools(server: McpServer, client: HonkioClient): void;
|
|
4
13
|
//# sourceMappingURL=tools.d.ts.map
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,aAAa,CAAC;AAgB7D,eAAO,MAAM,cAAc,8TAejB,CAAC;AAMX,eAAO,MAAM,oBAAoB,2LAcvB,CAAC;AA6DX,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAetG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAgnB3E"}
|