@webbula/mcp 1.0.0 → 1.2.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 +96 -82
- package/dist/api/types.d.ts +14 -0
- package/dist/api/webbula-client.d.ts +3 -1
- package/dist/api/webbula-client.js +5 -0
- package/dist/api/webbula-client.js.map +1 -1
- package/dist/tools/errors.d.ts +17 -0
- package/dist/tools/errors.js +31 -0
- package/dist/tools/errors.js.map +1 -1
- package/dist/tools/hygiene-check.js +4 -1
- package/dist/tools/hygiene-check.js.map +1 -1
- package/dist/tools/list-profiles.d.ts +33 -0
- package/dist/tools/list-profiles.js +49 -0
- package/dist/tools/list-profiles.js.map +1 -0
- package/dist/tools/register.js +2 -0
- package/dist/tools/register.js.map +1 -1
- package/dist/tools/upload-file.js +2 -0
- package/dist/tools/upload-file.js.map +1 -1
- package/dist/tools/validate-lead.js +4 -1
- package/dist/tools/validate-lead.js.map +1 -1
- package/dist/tools/verify-email.js +4 -1
- package/dist/tools/verify-email.js.map +1 -1
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
# Webbula MCP Server
|
|
2
2
|
|
|
3
|
-
Expose Webbula's email-intelligence
|
|
3
|
+
Expose Webbula's email-intelligence data to AI agents as
|
|
4
4
|
[Model Context Protocol](https://modelcontextprotocol.io) tools — verify and
|
|
5
|
-
clean email addresses, validate full lead records, run batch files,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
20+ year dataset.
|
|
5
|
+
clean email addresses, validate full lead records, run batch files, and check
|
|
6
|
+
your credit balance. Each verification result carries a **trust** block (data
|
|
7
|
+
provenance and activity history) from Webbula's 20+ year dataset.
|
|
9
8
|
|
|
10
9
|
The server is a thin wrapper over the Webbula API: it validates input, calls the
|
|
11
10
|
API over HTTPS, and reshapes the response. It performs no scoring of its own —
|
|
@@ -13,11 +12,93 @@ every verdict comes from Webbula.
|
|
|
13
12
|
|
|
14
13
|
---
|
|
15
14
|
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
You need **Node.js 20+** and a **Webbula API key**. Run the published package
|
|
18
|
+
directly with `npx` — no clone, no build:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# stdio (default) — for a local MCP host that spawns the server
|
|
22
|
+
WEBBULA_API_KEY=wb_your_key npx -y @webbula/mcp
|
|
23
|
+
|
|
24
|
+
# HTTP transport on port 4000 — for a remote/shared deployment
|
|
25
|
+
WEBBULA_API_KEY=wb_your_key PORT=4000 npx -y @webbula/mcp --http
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Connecting your AI tool
|
|
29
|
+
|
|
30
|
+
Every client launches the server over **stdio** and passes the key via `env`. Add
|
|
31
|
+
a `webbula` entry to your client's MCP config, then restart/reload the client —
|
|
32
|
+
the tools appear automatically.
|
|
33
|
+
|
|
34
|
+
**Claude Code** (CLI) — one command:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
claude mcp add webbula -e WEBBULA_API_KEY=wb_your_key -- npx -y @webbula/mcp
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Claude Desktop** — edit `claude_desktop_config.json` (macOS: `~/Library/Application Support/Claude/`, Windows: `%APPDATA%\Claude\`):
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"mcpServers": {
|
|
45
|
+
"webbula": {
|
|
46
|
+
"command": "npx",
|
|
47
|
+
"args": ["-y", "@webbula/mcp"],
|
|
48
|
+
"env": { "WEBBULA_API_KEY": "wb_your_key" }
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Cursor** — same `mcpServers` block as above, in `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (per project).
|
|
55
|
+
|
|
56
|
+
**Windsurf** — same `mcpServers` block, in `~/.codeium/windsurf/mcp_config.json`.
|
|
57
|
+
|
|
58
|
+
**VS Code** (Copilot agent mode) — in `.vscode/mcp.json`; note the key is `servers` and each entry needs a `type`:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"servers": {
|
|
63
|
+
"webbula": {
|
|
64
|
+
"type": "stdio",
|
|
65
|
+
"command": "npx",
|
|
66
|
+
"args": ["-y", "@webbula/mcp"],
|
|
67
|
+
"env": { "WEBBULA_API_KEY": "wb_your_key" }
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Configuration
|
|
76
|
+
|
|
77
|
+
The package is configured entirely through the **environment** — nothing else is
|
|
78
|
+
required. The API key is held in memory for the duration of a request only; it is
|
|
79
|
+
never logged, persisted, or returned in any tool output or error.
|
|
80
|
+
|
|
81
|
+
| Variable | Default | Purpose |
|
|
82
|
+
|----------|---------|---------|
|
|
83
|
+
| `WEBBULA_API_KEY` | — | **Required.** Your Webbula API key. Sent upstream as the `X-API-KEY` header. |
|
|
84
|
+
| `PORT` | `3000` | Listen port for the HTTP transport. |
|
|
85
|
+
|
|
86
|
+
The same tool set runs under two transports (stdio or HTTP); the transport is
|
|
87
|
+
chosen at launch (default stdio, `--http` for HTTP), everything else comes from
|
|
88
|
+
the environment.
|
|
89
|
+
|
|
90
|
+
> **Authentication model.** The key is configured **once, on the server
|
|
91
|
+
> process**, and every request uses it. The HTTP transport does **not** read a
|
|
92
|
+
> per-request `Authorization` / `X-API-KEY` header from inbound clients — run one
|
|
93
|
+
> server instance per key (per tenant, if you need multiple keys).
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
16
97
|
## Tools
|
|
17
98
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
99
|
+
8 tools available. Every tool validates input with `zod` before any upstream
|
|
100
|
+
call and returns the result both as pretty-printed text and as
|
|
101
|
+
`structuredContent`.
|
|
21
102
|
|
|
22
103
|
| # | Tool | Category | Required params | Optional params |
|
|
23
104
|
|---|------|----------|-----------------|-----------------|
|
|
@@ -28,19 +109,7 @@ as pretty-printed text and as `structuredContent`.
|
|
|
28
109
|
| 5 | `file_status` | Batch (async) | `package_name` | — |
|
|
29
110
|
| 6 | `download_results` | Batch (async) | `package_name`, `filename` | — |
|
|
30
111
|
| 7 | `get_credits` | Account | — | — |
|
|
31
|
-
| 8 | `
|
|
32
|
-
| 9 | `append_telephone` 🔜 | Data append | ≥1 identifying attribute † | `scope` |
|
|
33
|
-
| 10 | `append_postal` 🔜 | Data append | ≥1 identifying attribute † | `scope` |
|
|
34
|
-
| 11 | `append_automotive` 🔜 | Data append | ≥1 identifying attribute † | `scope` |
|
|
35
|
-
|
|
36
|
-
> 🔜 **Coming soon.** The four `append_*` (identity-resolution) tools are
|
|
37
|
-
> implemented and registered, but the data-append API endpoint is not yet wired
|
|
38
|
-
> up — these tools will go live once it is available.
|
|
39
|
-
>
|
|
40
|
-
> † The four `append_*` tools share one input: any combination of `first_name`,
|
|
41
|
-
> `last_name`, `email`, `address`, `city`, `state`, `zip5`, `phone` (at least one
|
|
42
|
-
> required), plus an optional `scope` (`individual` / `household` / `both`,
|
|
43
|
-
> default `both`).
|
|
112
|
+
| 8 | `list_profiles` | Account | — | — |
|
|
44
113
|
|
|
45
114
|
### Capability breakdown
|
|
46
115
|
|
|
@@ -54,12 +123,13 @@ as pretty-printed text and as `structuredContent`.
|
|
|
54
123
|
- **Batch file processing (async)** — `upload_file` submits a file (inline base64
|
|
55
124
|
or a web/FTP/SSH source) and returns a `package_name`; poll `file_status`, then
|
|
56
125
|
pull each output with `download_results` (`insert.csv` / `_report.xls`).
|
|
57
|
-
- **Data append (identity resolution) 🔜 coming soon** — the `append_*` tools
|
|
58
|
-
will resolve a contact from known PII and return one missing data point: email,
|
|
59
|
-
phone (+ line type), full postal address, or automotive (year/make/model). Built
|
|
60
|
-
and registered; awaiting the data-append API endpoint.
|
|
61
126
|
- **Account** — `get_credits` reports the remaining balance per billing scenario
|
|
62
|
-
with an explicit "unlimited" flag (consumes no verification credits)
|
|
127
|
+
with an explicit "unlimited" flag (consumes no verification credits);
|
|
128
|
+
`list_profiles` lists the profile names the account may use. The
|
|
129
|
+
profile-accepting tools (`verify_email`, `hygiene_check`, `validate_lead`,
|
|
130
|
+
`upload_file`) run a preflight against this list and reject an unavailable
|
|
131
|
+
profile — the one passed in the call or the server default — returning the
|
|
132
|
+
available profiles instead of an opaque upstream rejection.
|
|
63
133
|
|
|
64
134
|
### Result vocabulary
|
|
65
135
|
|
|
@@ -89,62 +159,6 @@ the tools above.
|
|
|
89
159
|
|
|
90
160
|
---
|
|
91
161
|
|
|
92
|
-
## Configuration
|
|
93
|
-
|
|
94
|
-
The package is configured entirely through the **environment** — nothing else is
|
|
95
|
-
required. The API key is held in memory for the duration of a request only; it is
|
|
96
|
-
never logged, persisted, or returned in any tool output or error.
|
|
97
|
-
|
|
98
|
-
| Variable | Default | Purpose |
|
|
99
|
-
|----------|---------|---------|
|
|
100
|
-
| `WEBBULA_API_KEY` | — | **Required.** Your Webbula API key. Sent upstream as the `X-API-KEY` header. |
|
|
101
|
-
| `PORT` | `3000` | Listen port for the HTTP transport. |
|
|
102
|
-
|
|
103
|
-
### Applying the configuration
|
|
104
|
-
|
|
105
|
-
The same tool set runs under two transports; the transport is chosen at launch,
|
|
106
|
-
everything else comes from the environment.
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
# stdio (default) — for a local MCP host that spawns the server
|
|
110
|
-
WEBBULA_API_KEY=wb_your_key npx -y @webbula/mcp
|
|
111
|
-
|
|
112
|
-
# HTTP transport on port 4000 — for a remote/shared deployment
|
|
113
|
-
WEBBULA_API_KEY=wb_your_key PORT=4000 npx -y @webbula/mcp --http
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
Most MCP hosts launch the server over stdio and inject the key via `env`
|
|
117
|
-
(Claude Desktop `claude_desktop_config.json` example):
|
|
118
|
-
|
|
119
|
-
```json
|
|
120
|
-
{
|
|
121
|
-
"mcpServers": {
|
|
122
|
-
"webbula": {
|
|
123
|
-
"command": "npx",
|
|
124
|
-
"args": ["-y", "@webbula/mcp"],
|
|
125
|
-
"env": {
|
|
126
|
-
"WEBBULA_API_KEY": "wb_your_key"
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
Step-by-step, per-client guides:
|
|
134
|
-
|
|
135
|
-
- [Claude Desktop](./docs/configuration-claude.md)
|
|
136
|
-
- [VS Code](./docs/configuration-vscode.md)
|
|
137
|
-
- [Cursor](./docs/configuration-cursor.md)
|
|
138
|
-
|
|
139
|
-
### Notes
|
|
140
|
-
|
|
141
|
-
- **Authentication model.** The key is configured **once, on the server
|
|
142
|
-
process**, and every request uses it. The HTTP transport does **not** read a
|
|
143
|
-
per-request `Authorization` / `X-API-KEY` header from inbound clients — run one
|
|
144
|
-
server instance per key (per tenant, if you need multiple keys).
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
162
|
## License
|
|
149
163
|
|
|
150
164
|
MIT © Webbula, LLC
|
package/dist/api/types.d.ts
CHANGED
|
@@ -138,6 +138,20 @@ export interface PersonaAppendResponse {
|
|
|
138
138
|
errors?: string[] | string;
|
|
139
139
|
message?: string;
|
|
140
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* `GET /api.v4/profiles` response — the list of profile names the authenticated
|
|
143
|
+
* account is allowed to use. `profiles` is a plain string array of profile names
|
|
144
|
+
* (e.g. `"WMT_BA_HVI"`, `"_Default_HI"`), passed through verbatim.
|
|
145
|
+
*/
|
|
146
|
+
export interface ProfilesResponse {
|
|
147
|
+
success: number;
|
|
148
|
+
transaction?: string;
|
|
149
|
+
account_id?: number;
|
|
150
|
+
/** Profile names available to the account, verbatim. */
|
|
151
|
+
profiles?: string[];
|
|
152
|
+
errors?: string[];
|
|
153
|
+
duration?: number;
|
|
154
|
+
}
|
|
141
155
|
/** `account/info` response. With `mode=short` the `key` field is omitted. */
|
|
142
156
|
export interface AccountInfoResponse {
|
|
143
157
|
success: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AccountInfoResponse, BatchRunResponse, BatchTaskResponse, ExpressCompoundResponse, ExpressEmailResponseV5, PersonaAppendResponse } from "./types.js";
|
|
1
|
+
import type { AccountInfoResponse, BatchRunResponse, BatchTaskResponse, ExpressCompoundResponse, ExpressEmailResponseV5, PersonaAppendResponse, ProfilesResponse } from "./types.js";
|
|
2
2
|
/** Batch submission parameters — exactly one of `inline` / `dataSource` is set. */
|
|
3
3
|
export interface BatchRunParams {
|
|
4
4
|
profile: string;
|
|
@@ -99,6 +99,8 @@ export interface WebbulaClient {
|
|
|
99
99
|
}): Promise<ExpressEmailResponseV5>;
|
|
100
100
|
/** `POST /api.v4/account/info` (form, `mode=short`) — `key` never returned (principle V). */
|
|
101
101
|
accountInfo(): Promise<AccountInfoResponse>;
|
|
102
|
+
/** `GET /api.v4/profiles` — the profile names the account is allowed to use. */
|
|
103
|
+
listProfiles(): Promise<ProfilesResponse>;
|
|
102
104
|
/** `POST /api.v4/task/lead` (form) — validate a lead record (feature 002). */
|
|
103
105
|
leadValidate(params: LeadValidateParams): Promise<ExpressCompoundResponse>;
|
|
104
106
|
/** `POST /api.v4/task/run` — submit a batch file task (multipart or form). */
|
|
@@ -142,6 +142,11 @@ export function createWebbulaClient(options = {}) {
|
|
|
142
142
|
// API key out of the response, principle V).
|
|
143
143
|
return request(`${API_PATH}/account/info`, formInit({ mode: "short" }));
|
|
144
144
|
},
|
|
145
|
+
async listProfiles() {
|
|
146
|
+
// v4 `profiles`: GET, the account's allowed profile names. Auth is the
|
|
147
|
+
// X-API-KEY header (added by `request`), so no body/query is needed.
|
|
148
|
+
return request(`${API_PATH}/profiles`, { method: "GET" });
|
|
149
|
+
},
|
|
145
150
|
async leadValidate(params) {
|
|
146
151
|
// Map our tool-facing fields to the v4 `task/lead` form params
|
|
147
152
|
// (firstname/lastname/address/phone/emails). Only supplied fields are sent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webbula-client.js","sourceRoot":"","sources":["../../src/api/webbula-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,GACzB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"webbula-client.js","sourceRoot":"","sources":["../../src/api/webbula-client.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/errors.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn any thrown error into a structured MCP tool error (`isError: true`),
|
|
3
|
+
* never a fabricated success and never leaking the API key (constitution
|
|
4
|
+
* principle V). `WebbulaApiError` messages are already safe to surface verbatim;
|
|
5
|
+
* unknown errors are reported generically.
|
|
6
|
+
*/
|
|
7
|
+
import { WebbulaApiError } from "../api/webbula-client.js";
|
|
1
8
|
export interface ToolErrorResult {
|
|
2
9
|
isError: true;
|
|
3
10
|
content: Array<{
|
|
@@ -7,4 +14,14 @@ export interface ToolErrorResult {
|
|
|
7
14
|
/** Matches the SDK's `CallToolResult` open shape. */
|
|
8
15
|
[key: string]: unknown;
|
|
9
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Raised by the profile preflight when the resolved profile (passed in the call
|
|
19
|
+
* or the server default) is not in the account's allowed list. Carries the
|
|
20
|
+
* available profiles so the tool error can hand them back to the agent.
|
|
21
|
+
*/
|
|
22
|
+
export declare class ProfileUnavailableError extends WebbulaApiError {
|
|
23
|
+
readonly profile: string;
|
|
24
|
+
readonly available: string[];
|
|
25
|
+
constructor(profile: string, available: string[]);
|
|
26
|
+
}
|
|
10
27
|
export declare function toToolError(error: unknown): ToolErrorResult;
|
package/dist/tools/errors.js
CHANGED
|
@@ -5,7 +5,38 @@
|
|
|
5
5
|
* unknown errors are reported generically.
|
|
6
6
|
*/
|
|
7
7
|
import { WebbulaApiError } from "../api/webbula-client.js";
|
|
8
|
+
/**
|
|
9
|
+
* Raised by the profile preflight when the resolved profile (passed in the call
|
|
10
|
+
* or the server default) is not in the account's allowed list. Carries the
|
|
11
|
+
* available profiles so the tool error can hand them back to the agent.
|
|
12
|
+
*/
|
|
13
|
+
export class ProfileUnavailableError extends WebbulaApiError {
|
|
14
|
+
profile;
|
|
15
|
+
available;
|
|
16
|
+
constructor(profile, available) {
|
|
17
|
+
super("validation", `Profile "${profile}" is not available to this account.` +
|
|
18
|
+
(available.length > 0
|
|
19
|
+
? ` Available profiles: ${available.join(", ")}`
|
|
20
|
+
: " No profiles are available to this account."));
|
|
21
|
+
this.name = "ProfileUnavailableError";
|
|
22
|
+
this.profile = profile;
|
|
23
|
+
this.available = available;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
8
26
|
export function toToolError(error) {
|
|
27
|
+
// An unavailable profile also surfaces the available list as structured
|
|
28
|
+
// content so an agent can retry with a valid profile.
|
|
29
|
+
if (error instanceof ProfileUnavailableError) {
|
|
30
|
+
return {
|
|
31
|
+
isError: true,
|
|
32
|
+
content: [{ type: "text", text: error.message }],
|
|
33
|
+
structuredContent: {
|
|
34
|
+
error: "profile_unavailable",
|
|
35
|
+
profile: error.profile,
|
|
36
|
+
available_profiles: error.available,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
9
40
|
const message = error instanceof WebbulaApiError
|
|
10
41
|
? error.message
|
|
11
42
|
: error instanceof Error
|
package/dist/tools/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/tools/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAS3D,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,OAAO,GACX,KAAK,YAAY,eAAe;QAC9B,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,KAAK,YAAY,KAAK;YACtB,CAAC,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE;YACtC,CAAC,CAAC,kBAAkB,CAAC;IAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/tools/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAS3D;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,eAAe;IACjD,OAAO,CAAS;IAChB,SAAS,CAAW;IAC7B,YAAY,OAAe,EAAE,SAAmB;QAC9C,KAAK,CACH,YAAY,EACZ,YAAY,OAAO,qCAAqC;YACtD,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACnB,CAAC,CAAC,wBAAwB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChD,CAAC,CAAC,6CAA6C,CAAC,CACrD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,wEAAwE;IACxE,sDAAsD;IACtD,IAAI,KAAK,YAAY,uBAAuB,EAAE,CAAC;QAC7C,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAChD,iBAAiB,EAAE;gBACjB,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,kBAAkB,EAAE,KAAK,CAAC,SAAS;aACpC;SACF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GACX,KAAK,YAAY,eAAe;QAC9B,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,KAAK,YAAY,KAAK;YACtB,CAAC,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE;YACtC,CAAC,CAAC,kBAAkB,CAAC;IAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { lookupEmailVerdict } from "../api/enums.js";
|
|
|
3
3
|
import { WEBBULA_HYGIENE_PROFILE, WEBBULA_MAX_EMAILS } from "../config.js";
|
|
4
4
|
import { assembleTrust } from "../trust.js";
|
|
5
5
|
import { toToolError } from "./errors.js";
|
|
6
|
+
import { assertProfileAvailable } from "./list-profiles.js";
|
|
6
7
|
export const HYGIENE_CHECK_NAME = "hygiene_check";
|
|
7
8
|
export const HYGIENE_CHECK_DESCRIPTION = "Run Webbula's full email hygiene analysis on one or more addresses. For each " +
|
|
8
9
|
"email you get its classification, activity history (first/last seen, " +
|
|
@@ -66,9 +67,11 @@ export function registerHygieneCheck(server, client) {
|
|
|
66
67
|
inputSchema: hygieneCheckInputShape,
|
|
67
68
|
}, async ({ emails, profile }) => {
|
|
68
69
|
try {
|
|
70
|
+
const resolvedProfile = profile ?? WEBBULA_HYGIENE_PROFILE;
|
|
71
|
+
await assertProfileAvailable(client, resolvedProfile);
|
|
69
72
|
const response = await client.expressHygieneV5({
|
|
70
73
|
emails,
|
|
71
|
-
profile:
|
|
74
|
+
profile: resolvedProfile,
|
|
72
75
|
});
|
|
73
76
|
const result = toHygieneCheckResult(response);
|
|
74
77
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hygiene-check.js","sourceRoot":"","sources":["../../src/tools/hygiene-check.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"hygiene-check.js","sourceRoot":"","sources":["../../src/tools/hygiene-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `list_profiles` — list the profile names the account is allowed to use. Maps
|
|
3
|
+
* to `GET /api.v4/profiles` and reshapes the upstream `ProfilesResponse` into an
|
|
4
|
+
* `AvailableProfiles` (the `profiles` array verbatim, plus `account_id`).
|
|
5
|
+
*
|
|
6
|
+
* The same upstream call backs the per-tool profile preflight: every tool that
|
|
7
|
+
* accepts a `profile` resolves the effective profile (the one passed in the call
|
|
8
|
+
* or the server default) and checks it against this list BEFORE the real upstream
|
|
9
|
+
* call, so an unknown profile fails loudly with the available set rather than
|
|
10
|
+
* surfacing an opaque upstream rejection (constitution principle V).
|
|
11
|
+
*/
|
|
12
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
|
+
import type { ProfilesResponse } from "../api/types.js";
|
|
14
|
+
import type { WebbulaClient } from "../api/webbula-client.js";
|
|
15
|
+
export declare const LIST_PROFILES_NAME = "list_profiles";
|
|
16
|
+
export declare const LIST_PROFILES_DESCRIPTION: string;
|
|
17
|
+
/** This tool takes no parameters. */
|
|
18
|
+
export declare const listProfilesInputShape: {};
|
|
19
|
+
export interface AvailableProfiles {
|
|
20
|
+
account_id?: number;
|
|
21
|
+
/** Profile names the account may use, verbatim. */
|
|
22
|
+
profiles: string[];
|
|
23
|
+
}
|
|
24
|
+
/** Reshape the upstream `ProfilesResponse` into the agent-facing list. */
|
|
25
|
+
export declare function toAvailableProfiles(response: ProfilesResponse): AvailableProfiles;
|
|
26
|
+
/**
|
|
27
|
+
* Preflight: confirm `profile` is one the account may use before the real call.
|
|
28
|
+
* Throws a `ProfileUnavailableError` (carrying the available list) when it is
|
|
29
|
+
* not. Shared by every profile-accepting tool so the check is identical.
|
|
30
|
+
*/
|
|
31
|
+
export declare function assertProfileAvailable(client: WebbulaClient, profile: string): Promise<void>;
|
|
32
|
+
/** Register `list_profiles` against the MCP server. */
|
|
33
|
+
export declare function registerListProfiles(server: McpServer, client: WebbulaClient): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ProfileUnavailableError, toToolError } from "./errors.js";
|
|
2
|
+
export const LIST_PROFILES_NAME = "list_profiles";
|
|
3
|
+
export const LIST_PROFILES_DESCRIPTION = "List the Webbula profiles your account is allowed to use. A profile (or " +
|
|
4
|
+
"preset) selects the verification/hygiene/lead validations and the billing " +
|
|
5
|
+
"scenario a call runs under. Use this to discover valid profile names before " +
|
|
6
|
+
"calling verify_email, hygiene_check, validate_lead, or upload_file — those " +
|
|
7
|
+
"tools reject a profile that is not on this list.";
|
|
8
|
+
/** This tool takes no parameters. */
|
|
9
|
+
export const listProfilesInputShape = {};
|
|
10
|
+
/** Reshape the upstream `ProfilesResponse` into the agent-facing list. */
|
|
11
|
+
export function toAvailableProfiles(response) {
|
|
12
|
+
const out = { profiles: response.profiles ?? [] };
|
|
13
|
+
if (typeof response.account_id === "number")
|
|
14
|
+
out.account_id = response.account_id;
|
|
15
|
+
return out;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Preflight: confirm `profile` is one the account may use before the real call.
|
|
19
|
+
* Throws a `ProfileUnavailableError` (carrying the available list) when it is
|
|
20
|
+
* not. Shared by every profile-accepting tool so the check is identical.
|
|
21
|
+
*/
|
|
22
|
+
export async function assertProfileAvailable(client, profile) {
|
|
23
|
+
const response = await client.listProfiles();
|
|
24
|
+
const available = response.profiles ?? [];
|
|
25
|
+
if (!available.includes(profile)) {
|
|
26
|
+
throw new ProfileUnavailableError(profile, available);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Register `list_profiles` against the MCP server. */
|
|
30
|
+
export function registerListProfiles(server, client) {
|
|
31
|
+
server.registerTool(LIST_PROFILES_NAME, {
|
|
32
|
+
title: "List available profiles",
|
|
33
|
+
description: LIST_PROFILES_DESCRIPTION,
|
|
34
|
+
inputSchema: listProfilesInputShape,
|
|
35
|
+
}, async () => {
|
|
36
|
+
try {
|
|
37
|
+
const response = await client.listProfiles();
|
|
38
|
+
const result = toAvailableProfiles(response);
|
|
39
|
+
return {
|
|
40
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
41
|
+
structuredContent: result,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return toToolError(error);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=list-profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-profiles.js","sourceRoot":"","sources":["../../src/tools/list-profiles.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD,MAAM,CAAC,MAAM,yBAAyB,GACpC,0EAA0E;IAC1E,4EAA4E;IAC5E,8EAA8E;IAC9E,6EAA6E;IAC7E,kDAAkD,CAAC;AAErD,qCAAqC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAW,CAAC;AAQlD,0EAA0E;AAC1E,MAAM,UAAU,mBAAmB,CAAC,QAA0B;IAC5D,MAAM,GAAG,GAAsB,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;IACrE,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ;QAAE,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IAClF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAqB,EACrB,OAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAqB;IAC3E,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE,sBAAsB;KACpC,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClE,iBAAiB,EAAE,MAA4C;aAChE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/register.js
CHANGED
|
@@ -2,6 +2,7 @@ import { registerDownloadResults } from "./download-results.js";
|
|
|
2
2
|
import { registerFileStatus } from "./file-status.js";
|
|
3
3
|
import { registerGetCredits } from "./get-credits.js";
|
|
4
4
|
import { registerHygieneCheck } from "./hygiene-check.js";
|
|
5
|
+
import { registerListProfiles } from "./list-profiles.js";
|
|
5
6
|
import { registerPersonaAppend } from "./persona-append.js";
|
|
6
7
|
import { registerUploadFile } from "./upload-file.js";
|
|
7
8
|
import { registerValidateLead } from "./validate-lead.js";
|
|
@@ -14,6 +15,7 @@ export function registerTools(server, client) {
|
|
|
14
15
|
registerVerifyEmail(server, client); // 001 US1
|
|
15
16
|
registerHygieneCheck(server, client); // 001 US2
|
|
16
17
|
registerGetCredits(server, client); // 001 US3
|
|
18
|
+
registerListProfiles(server, client); // 007 profile discovery + preflight
|
|
17
19
|
registerValidateLead(server, client); // 002 lead validation
|
|
18
20
|
registerUploadFile(server, client); // 003 US1 batch submit
|
|
19
21
|
registerFileStatus(server, client); // 003 US2 batch status
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAqB;IACpE,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU;IAC/C,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU;IAChD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU;IAC9C,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,sBAAsB;IAC5D,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,uBAAuB;IAC3D,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,uBAAuB;IAC3D,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,yBAAyB;IAClE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,oCAAoC;AAC7E,CAAC"}
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAqB;IACpE,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU;IAC/C,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU;IAChD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU;IAC9C,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,oCAAoC;IAC1E,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,sBAAsB;IAC5D,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,uBAAuB;IAC3D,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,uBAAuB;IAC3D,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,yBAAyB;IAClE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,oCAAoC;AAC7E,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import { WebbulaApiError, } from "../api/webbula-client.js";
|
|
3
3
|
import { WEBBULA_BATCH_PROFILE, WEBBULA_MAX_INLINE_BYTES } from "../config.js";
|
|
4
4
|
import { toToolError } from "./errors.js";
|
|
5
|
+
import { assertProfileAvailable } from "./list-profiles.js";
|
|
5
6
|
export const UPLOAD_FILE_NAME = "upload_file";
|
|
6
7
|
export const UPLOAD_FILE_DESCRIPTION = "Submit a file of emails for asynchronous batch hygiene when the list is too " +
|
|
7
8
|
"large for the real-time tools. Provide the file inline (base64 + filename) or " +
|
|
@@ -104,6 +105,7 @@ export function registerUploadFile(server, client) {
|
|
|
104
105
|
}, async (input) => {
|
|
105
106
|
try {
|
|
106
107
|
const params = buildBatchRunParams(input);
|
|
108
|
+
await assertProfileAvailable(client, params.profile);
|
|
107
109
|
const response = await client.runBatch(params);
|
|
108
110
|
const result = toBatchSubmissionResult(response);
|
|
109
111
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-file.js","sourceRoot":"","sources":["../../src/tools/upload-file.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,eAAe,GAGhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"upload-file.js","sourceRoot":"","sources":["../../src/tools/upload-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { WebbulaApiError, } from "../api/webbula-client.js";
|
|
|
4
4
|
import { WEBBULA_LEAD_PROFILE, WEBBULA_MAX_EMAILS } from "../config.js";
|
|
5
5
|
import { toVerificationResult } from "./verify-email.js";
|
|
6
6
|
import { toToolError } from "./errors.js";
|
|
7
|
+
import { assertProfileAvailable } from "./list-profiles.js";
|
|
7
8
|
export const VALIDATE_LEAD_NAME = "validate_lead";
|
|
8
9
|
export const VALIDATE_LEAD_DESCRIPTION = "Validate a full lead/contact record with Webbula's leadHygiene. Parses and " +
|
|
9
10
|
"assesses any combination of name, postal address, and phone number — modeled " +
|
|
@@ -173,8 +174,10 @@ export function registerValidateLead(server, client) {
|
|
|
173
174
|
try {
|
|
174
175
|
assertAtLeastOneAttribute(input);
|
|
175
176
|
const { profile, ...attributes } = input;
|
|
177
|
+
const resolvedProfile = profile ?? WEBBULA_LEAD_PROFILE;
|
|
178
|
+
await assertProfileAvailable(client, resolvedProfile);
|
|
176
179
|
const params = {
|
|
177
|
-
profile:
|
|
180
|
+
profile: resolvedProfile,
|
|
178
181
|
...attributes,
|
|
179
182
|
};
|
|
180
183
|
const response = await client.leadValidate(params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-lead.js","sourceRoot":"","sources":["../../src/tools/validate-lead.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,eAAe,GAGhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAgC,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"validate-lead.js","sourceRoot":"","sources":["../../src/tools/validate-lead.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { WebbulaApiError } from "../api/webbula-client.js";
|
|
|
4
4
|
import { WEBBULA_VERIFICATION_PROFILE } from "../config.js";
|
|
5
5
|
import { assembleTrust } from "../trust.js";
|
|
6
6
|
import { toToolError } from "./errors.js";
|
|
7
|
+
import { assertProfileAvailable } from "./list-profiles.js";
|
|
7
8
|
export const VERIFY_EMAIL_NAME = "verify_email";
|
|
8
9
|
export const VERIFY_EMAIL_DESCRIPTION = "Verify a single email address using Webbula's 20+ year email-intelligence " +
|
|
9
10
|
"dataset. Returns a deliverability verdict, any corrected form, and a trust " +
|
|
@@ -52,9 +53,11 @@ export function registerVerifyEmail(server, client) {
|
|
|
52
53
|
inputSchema: verifyEmailInputShape,
|
|
53
54
|
}, async ({ email, profile }) => {
|
|
54
55
|
try {
|
|
56
|
+
const resolvedProfile = profile ?? WEBBULA_VERIFICATION_PROFILE;
|
|
57
|
+
await assertProfileAvailable(client, resolvedProfile);
|
|
55
58
|
const response = await client.expressHygiene({
|
|
56
59
|
emails: [email],
|
|
57
|
-
profile:
|
|
60
|
+
profile: resolvedProfile,
|
|
58
61
|
});
|
|
59
62
|
const first = response.emails?.[0];
|
|
60
63
|
if (!first) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-email.js","sourceRoot":"","sources":["../../src/tools/verify-email.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAsB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"verify-email.js","sourceRoot":"","sources":["../../src/tools/verify-email.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webbula/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Webbula MCP Server — email verification, hygiene, and data-quality trust layer for AI agents",
|
|
5
5
|
"homepage": "https://github.com/webbula/webbula-mcp#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -21,11 +21,10 @@
|
|
|
21
21
|
"dist"
|
|
22
22
|
],
|
|
23
23
|
"publishConfig": {
|
|
24
|
-
"access": "public"
|
|
25
|
-
"provenance": true
|
|
24
|
+
"access": "public"
|
|
26
25
|
},
|
|
27
26
|
"engines": {
|
|
28
|
-
"node": ">=
|
|
27
|
+
"node": ">=20"
|
|
29
28
|
},
|
|
30
29
|
"keywords": [
|
|
31
30
|
"mcp",
|