@webbula/mcp 1.0.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.
Files changed (56) hide show
  1. package/README.md +150 -0
  2. package/dist/api/enums.d.ts +80 -0
  3. package/dist/api/enums.js +230 -0
  4. package/dist/api/enums.js.map +1 -0
  5. package/dist/api/types.d.ts +163 -0
  6. package/dist/api/types.js +8 -0
  7. package/dist/api/types.js.map +1 -0
  8. package/dist/api/webbula-client.d.ts +116 -0
  9. package/dist/api/webbula-client.js +249 -0
  10. package/dist/api/webbula-client.js.map +1 -0
  11. package/dist/config.d.ts +70 -0
  12. package/dist/config.js +90 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.js +23 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/server/http.d.ts +4 -0
  18. package/dist/server/http.js +76 -0
  19. package/dist/server/http.js.map +1 -0
  20. package/dist/server/stdio.d.ts +12 -0
  21. package/dist/server/stdio.js +30 -0
  22. package/dist/server/stdio.js.map +1 -0
  23. package/dist/tools/download-results.d.ts +35 -0
  24. package/dist/tools/download-results.js +62 -0
  25. package/dist/tools/download-results.js.map +1 -0
  26. package/dist/tools/errors.d.ts +10 -0
  27. package/dist/tools/errors.js +16 -0
  28. package/dist/tools/errors.js.map +1 -0
  29. package/dist/tools/file-status.d.ts +35 -0
  30. package/dist/tools/file-status.js +54 -0
  31. package/dist/tools/file-status.js.map +1 -0
  32. package/dist/tools/get-credits.d.ts +31 -0
  33. package/dist/tools/get-credits.js +47 -0
  34. package/dist/tools/get-credits.js.map +1 -0
  35. package/dist/tools/hygiene-check.d.ts +49 -0
  36. package/dist/tools/hygiene-check.js +84 -0
  37. package/dist/tools/hygiene-check.js.map +1 -0
  38. package/dist/tools/persona-append.d.ts +62 -0
  39. package/dist/tools/persona-append.js +123 -0
  40. package/dist/tools/persona-append.js.map +1 -0
  41. package/dist/tools/register.d.ts +15 -0
  42. package/dist/tools/register.js +23 -0
  43. package/dist/tools/register.js.map +1 -0
  44. package/dist/tools/upload-file.d.ts +58 -0
  45. package/dist/tools/upload-file.js +119 -0
  46. package/dist/tools/upload-file.js.map +1 -0
  47. package/dist/tools/validate-lead.d.ts +102 -0
  48. package/dist/tools/validate-lead.js +192 -0
  49. package/dist/tools/validate-lead.js.map +1 -0
  50. package/dist/tools/verify-email.d.ts +41 -0
  51. package/dist/tools/verify-email.js +74 -0
  52. package/dist/tools/verify-email.js.map +1 -0
  53. package/dist/trust.d.ts +28 -0
  54. package/dist/trust.js +23 -0
  55. package/dist/trust.js.map +1 -0
  56. package/package.json +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-lead.js","sourceRoot":"","sources":["../../src/tools/validate-lead.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * `verify_email` — verify a single address (spec US1). Maps to
3
+ * `POST /api/v5/task/express` with one email and reshapes the single
4
+ * `EmailResult` into an `EmailVerificationResult` (contracts/verify_email.md).
5
+ *
6
+ * `status` is the upstream verdict verbatim; `label`, `risk`, `description`, and
7
+ * `usable` are a STATIC dictionary lookup of that verdict (all omitted for
8
+ * unknown tokens) — the wrapper performs no scoring or inference (constitution
9
+ * principle I). The dictionary lives in `api/enums.ts`.
10
+ */
11
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
12
+ import { z } from "zod";
13
+ import type { EmailResult } from "../api/types.js";
14
+ import { type WebbulaClient } from "../api/webbula-client.js";
15
+ import { type TrustMetadata } from "../trust.js";
16
+ export declare const VERIFY_EMAIL_NAME = "verify_email";
17
+ export declare const VERIFY_EMAIL_DESCRIPTION: string;
18
+ /** Zod raw shape for the tool input (validated before any upstream call). */
19
+ export declare const verifyEmailInputShape: {
20
+ readonly email: z.ZodString;
21
+ readonly profile: z.ZodOptional<z.ZodString>;
22
+ };
23
+ export interface EmailVerificationResult {
24
+ email: string;
25
+ corrected?: string;
26
+ /** Upstream `result` token, verbatim. */
27
+ status: string;
28
+ /** Human-readable label for `status`; omitted for unknown tokens. */
29
+ label?: string;
30
+ /** Documented risk level for `status`; omitted for unknown tokens. */
31
+ risk?: string;
32
+ /** Documented description for `status`; omitted for unknown tokens. */
33
+ description?: string;
34
+ /** Static verdict for `status`; omitted for unknown or indeterminate tokens. */
35
+ usable?: boolean;
36
+ trust?: TrustMetadata;
37
+ }
38
+ /** Reshape a single upstream `EmailResult` into the agent-facing verdict. */
39
+ export declare function toVerificationResult(result: EmailResult): EmailVerificationResult;
40
+ /** Register `verify_email` against the MCP server. */
41
+ export declare function registerVerifyEmail(server: McpServer, client: WebbulaClient): void;
@@ -0,0 +1,74 @@
1
+ import { z } from "zod";
2
+ import { lookupEmailVerdict } from "../api/enums.js";
3
+ import { WebbulaApiError } from "../api/webbula-client.js";
4
+ import { WEBBULA_VERIFICATION_PROFILE } from "../config.js";
5
+ import { assembleTrust } from "../trust.js";
6
+ import { toToolError } from "./errors.js";
7
+ export const VERIFY_EMAIL_NAME = "verify_email";
8
+ export const VERIFY_EMAIL_DESCRIPTION = "Verify a single email address using Webbula's 20+ year email-intelligence " +
9
+ "dataset. Returns a deliverability verdict, any corrected form, and a trust " +
10
+ "block (data provenance and activity history) so an agent can decide whether " +
11
+ "the address is safe to use. Real-time, single tool call.";
12
+ /** Zod raw shape for the tool input (validated before any upstream call). */
13
+ export const verifyEmailInputShape = {
14
+ email: z
15
+ .string()
16
+ .email()
17
+ .describe("The email address to verify."),
18
+ profile: z
19
+ .string()
20
+ .optional()
21
+ .describe("Optional Webbula hygiene profile name. Defaults to the server's configured profile."),
22
+ };
23
+ /** Reshape a single upstream `EmailResult` into the agent-facing verdict. */
24
+ export function toVerificationResult(result) {
25
+ const out = {
26
+ email: result.email,
27
+ status: result.result,
28
+ };
29
+ if (result.corrected !== undefined && result.corrected !== result.email) {
30
+ out.corrected = result.corrected;
31
+ }
32
+ // Static lookup of the documented label/risk/description/usable (api/enums.ts).
33
+ // Unknown tokens leave every friendly field omitted (principle I — no guessing).
34
+ const verdict = lookupEmailVerdict(result.result);
35
+ if (verdict !== undefined) {
36
+ out.label = verdict.label;
37
+ out.risk = verdict.risk;
38
+ out.description = verdict.description;
39
+ if (verdict.usable !== undefined)
40
+ out.usable = verdict.usable;
41
+ }
42
+ const trust = assembleTrust(result);
43
+ if (trust !== undefined)
44
+ out.trust = trust;
45
+ return out;
46
+ }
47
+ /** Register `verify_email` against the MCP server. */
48
+ export function registerVerifyEmail(server, client) {
49
+ server.registerTool(VERIFY_EMAIL_NAME, {
50
+ title: "Verify a single email",
51
+ description: VERIFY_EMAIL_DESCRIPTION,
52
+ inputSchema: verifyEmailInputShape,
53
+ }, async ({ email, profile }) => {
54
+ try {
55
+ const response = await client.expressHygiene({
56
+ emails: [email],
57
+ profile: profile ?? WEBBULA_VERIFICATION_PROFILE,
58
+ });
59
+ const first = response.emails?.[0];
60
+ if (!first) {
61
+ throw new WebbulaApiError("upstream", "Webbula returned no result for the address");
62
+ }
63
+ const result = toVerificationResult(first);
64
+ return {
65
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
66
+ structuredContent: result,
67
+ };
68
+ }
69
+ catch (error) {
70
+ return toToolError(error);
71
+ }
72
+ });
73
+ }
74
+ //# sourceMappingURL=verify-email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-email.js","sourceRoot":"","sources":["../../src/tools/verify-email.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The trust layer — the wrapper's differentiator (constitution principle II).
3
+ *
4
+ * `assembleTrust` builds a trust block ONLY from upstream fields that are
5
+ * actually present (research D6). It never fabricates a value: `confidence` and
6
+ * `ai_pollution_risk` are not in the current v4.2/v5 response, so they are
7
+ * omitted today and wired in when the API adds them. When no provenance/activity
8
+ * fields are present, the whole block is omitted (the function returns
9
+ * `undefined`).
10
+ */
11
+ import type { EmailResult } from "./api/types.js";
12
+ export interface TrustMetadata {
13
+ /** Static provenance — this data comes from Webbula. */
14
+ data_source: "webbula";
15
+ /** From `activity_first_seen` when present. */
16
+ first_seen?: string;
17
+ /** From `activity_most_recent_seen` when present. */
18
+ last_seen?: string;
19
+ /** From `activity_trajectory` when present. */
20
+ trajectory?: string;
21
+ }
22
+ /**
23
+ * Assemble the trust block from a single upstream `EmailResult`. Returns
24
+ * `undefined` when the upstream supplied no activity/provenance fields, so
25
+ * callers omit the `trust` key entirely rather than emitting a bare
26
+ * `{ data_source }`.
27
+ */
28
+ export declare function assembleTrust(result: EmailResult): TrustMetadata | undefined;
package/dist/trust.js ADDED
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Assemble the trust block from a single upstream `EmailResult`. Returns
3
+ * `undefined` when the upstream supplied no activity/provenance fields, so
4
+ * callers omit the `trust` key entirely rather than emitting a bare
5
+ * `{ data_source }`.
6
+ */
7
+ export function assembleTrust(result) {
8
+ const { activity_first_seen, activity_most_recent_seen, activity_trajectory } = result;
9
+ const hasAnyActivity = activity_first_seen !== undefined ||
10
+ activity_most_recent_seen !== undefined ||
11
+ activity_trajectory !== undefined;
12
+ if (!hasAnyActivity)
13
+ return undefined;
14
+ const trust = { data_source: "webbula" };
15
+ if (activity_first_seen !== undefined)
16
+ trust.first_seen = activity_first_seen;
17
+ if (activity_most_recent_seen !== undefined)
18
+ trust.last_seen = activity_most_recent_seen;
19
+ if (activity_trajectory !== undefined)
20
+ trust.trajectory = activity_trajectory;
21
+ return trust;
22
+ }
23
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAyBA;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAmB;IAC/C,MAAM,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,GAC3E,MAAM,CAAC;IAET,MAAM,cAAc,GAClB,mBAAmB,KAAK,SAAS;QACjC,yBAAyB,KAAK,SAAS;QACvC,mBAAmB,KAAK,SAAS,CAAC;IAEpC,IAAI,CAAC,cAAc;QAAE,OAAO,SAAS,CAAC;IAEtC,MAAM,KAAK,GAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IACxD,IAAI,mBAAmB,KAAK,SAAS;QAAE,KAAK,CAAC,UAAU,GAAG,mBAAmB,CAAC;IAC9E,IAAI,yBAAyB,KAAK,SAAS;QACzC,KAAK,CAAC,SAAS,GAAG,yBAAyB,CAAC;IAC9C,IAAI,mBAAmB,KAAK,SAAS;QAAE,KAAK,CAAC,UAAU,GAAG,mBAAmB,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@webbula/mcp",
3
+ "version": "1.0.0",
4
+ "description": "Webbula MCP Server — email verification, hygiene, and data-quality trust layer for AI agents",
5
+ "homepage": "https://github.com/webbula/webbula-mcp#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/webbula/webbula-mcp/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/webbula/webbula-mcp.git"
12
+ },
13
+ "license": "MIT",
14
+ "author": "Webbula, LLC",
15
+ "type": "module",
16
+ "main": "dist/index.js",
17
+ "bin": {
18
+ "webbula-mcp": "dist/index.js"
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "publishConfig": {
24
+ "access": "public",
25
+ "provenance": true
26
+ },
27
+ "engines": {
28
+ "node": ">=18"
29
+ },
30
+ "keywords": [
31
+ "mcp",
32
+ "email-verification",
33
+ "email-hygiene",
34
+ "data-quality",
35
+ "ai-agents",
36
+ "webbula"
37
+ ],
38
+ "scripts": {
39
+ "build": "tsc",
40
+ "clean": "rm -rf dist dist-test *.tsbuildinfo",
41
+ "start": "node dist/index.js",
42
+ "dev": "tsc --watch",
43
+ "typecheck": "tsc --noEmit",
44
+ "lint": "eslint .",
45
+ "lint:fix": "eslint . --fix",
46
+ "build:test": "tsc -p tsconfig.test.json",
47
+ "test": "npm run build:test && node --test \"dist-test/tests/**/*.test.js\"",
48
+ "prepack": "npm run clean && npm run build",
49
+ "release": "semantic-release"
50
+ },
51
+ "dependencies": {
52
+ "@modelcontextprotocol/sdk": "^1.24.0",
53
+ "express": "^5.1.0",
54
+ "zod": "^3.25.0"
55
+ },
56
+ "devDependencies": {
57
+ "@eslint/js": "^9.39.4",
58
+ "@semantic-release/changelog": "^6.0.3",
59
+ "@semantic-release/git": "^10.0.1",
60
+ "@types/express": "^5.0.0",
61
+ "@types/node": "^22.0.0",
62
+ "eslint": "^9.39.4",
63
+ "semantic-release": "^25.0.5",
64
+ "typescript": "^5.6.0",
65
+ "typescript-eslint": "^8.61.0"
66
+ }
67
+ }