@cognilead/mcp-server 0.1.0 → 0.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/dist/auth.js +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -5
- package/dist/index.js.map +1 -1
- package/dist/prompts.d.ts +24 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +99 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +15 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +75 -0
- package/dist/resources.js.map +1 -0
- package/dist/schemas.d.ts +21 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +18 -1
- package/dist/schemas.js.map +1 -1
- package/dist/tools/check-deliverability.d.ts +2 -0
- package/dist/tools/check-deliverability.d.ts.map +1 -0
- package/dist/tools/check-deliverability.js +126 -0
- package/dist/tools/check-deliverability.js.map +1 -0
- package/dist/tools/ingest-lead.js +1 -1
- package/dist/tools/ingest-lead.js.map +1 -1
- package/dist/tools/score-signal.d.ts.map +1 -1
- package/dist/tools/score-signal.js +0 -1
- package/dist/tools/score-signal.js.map +1 -1
- package/package.json +2 -2
package/dist/auth.js
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAaA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAaA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAsClE,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9C;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,EAkD3B,CAAA;AAiCD,wBAAgB,YAAY,IAAI,MAAM,CAiGrC"}
|
package/dist/index.js
CHANGED
|
@@ -12,23 +12,26 @@
|
|
|
12
12
|
// directly to the developer, which is the canonical acquisition moment.
|
|
13
13
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
14
14
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
15
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
16
|
-
import { DraftPitchJsonSchema, ScoreSignalJsonSchema, IngestLeadJsonSchema, RunCampaignJsonSchema, SuppressJsonSchema, GenerateSeoContentJsonSchema, } from './schemas.js';
|
|
15
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
16
|
+
import { DraftPitchJsonSchema, ScoreSignalJsonSchema, IngestLeadJsonSchema, RunCampaignJsonSchema, SuppressJsonSchema, GenerateSeoContentJsonSchema, CheckDeliverabilityJsonSchema, } from './schemas.js';
|
|
17
17
|
import { draftPitch } from './tools/draft-pitch.js';
|
|
18
18
|
import { scoreSignal } from './tools/score-signal.js';
|
|
19
19
|
import { ingestLead } from './tools/ingest-lead.js';
|
|
20
20
|
import { runCampaign } from './tools/run-campaign.js';
|
|
21
21
|
import { suppress } from './tools/suppress.js';
|
|
22
22
|
import { generateSeoContent } from './tools/generate-seo-content.js';
|
|
23
|
+
import { checkDeliverability } from './tools/check-deliverability.js';
|
|
24
|
+
import { RESOURCES, readResource } from './resources.js';
|
|
25
|
+
import { PROMPTS, getPrompt } from './prompts.js';
|
|
23
26
|
import { McpAuthError, McpQuotaError } from './auth.js';
|
|
24
27
|
const SERVER_INFO = {
|
|
25
28
|
name: 'cognilead-mcp',
|
|
26
|
-
version: '0.
|
|
29
|
+
version: '0.2.0',
|
|
27
30
|
};
|
|
28
31
|
export const TOOLS = [
|
|
29
32
|
{
|
|
30
33
|
name: 'cognilead.draft_pitch',
|
|
31
|
-
description: 'Draft a cold-outbound pitch for a technical company based on a public signal (job post URL, GitHub repo, HN comment).
|
|
34
|
+
description: 'Draft a cold-outbound pitch for a technical company based on a public signal (job post URL, GitHub repo, HN comment). Jurisdiction-aware routing — each recipient is processed in its own region for data residency (e.g. EU recipients via EU-resident inference). Returns subject_line, email_body_markdown, and a technical_hook_verified flag (false ⇒ the signal lacked a citable hook). Free tier capped at 20 calls/day.',
|
|
32
35
|
inputSchema: DraftPitchJsonSchema,
|
|
33
36
|
handler: draftPitch,
|
|
34
37
|
},
|
|
@@ -38,9 +41,15 @@ export const TOOLS = [
|
|
|
38
41
|
inputSchema: ScoreSignalJsonSchema,
|
|
39
42
|
handler: scoreSignal,
|
|
40
43
|
},
|
|
44
|
+
{
|
|
45
|
+
name: 'cognilead.check_deliverability',
|
|
46
|
+
description: 'Check a domain’s email deliverability DNS — SPF and DMARC records — and grade them with prioritized findings. Local DNS lookup only; no API key required. Use before sending cold to confirm a domain is configured to land in the inbox. Returns overall_verdict plus per-record verdict, the raw record, and findings.',
|
|
47
|
+
inputSchema: CheckDeliverabilityJsonSchema,
|
|
48
|
+
handler: checkDeliverability,
|
|
49
|
+
},
|
|
41
50
|
{
|
|
42
51
|
name: 'cognilead.ingest_lead',
|
|
43
|
-
description: 'Register a lead in the CogniLead pipeline. Runs through the intersect stage (suppression check, dedup
|
|
52
|
+
description: 'Register a lead in the CogniLead pipeline. Runs through the intersect stage (suppression check, dedup). Returns the persisted lead row. Requires a CogniLead API key.',
|
|
44
53
|
inputSchema: IngestLeadJsonSchema,
|
|
45
54
|
handler: ingestLead,
|
|
46
55
|
},
|
|
@@ -88,6 +97,8 @@ export function createServer() {
|
|
|
88
97
|
const server = new Server(SERVER_INFO, {
|
|
89
98
|
capabilities: {
|
|
90
99
|
tools: {},
|
|
100
|
+
resources: {},
|
|
101
|
+
prompts: {},
|
|
91
102
|
},
|
|
92
103
|
});
|
|
93
104
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
@@ -131,6 +142,47 @@ export function createServer() {
|
|
|
131
142
|
};
|
|
132
143
|
}
|
|
133
144
|
});
|
|
145
|
+
// ─── Resources ──────────────────────────────────────────────────────────
|
|
146
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
147
|
+
resources: RESOURCES.map((r) => ({
|
|
148
|
+
uri: r.uri,
|
|
149
|
+
name: r.name,
|
|
150
|
+
description: r.description,
|
|
151
|
+
mimeType: r.mimeType,
|
|
152
|
+
})),
|
|
153
|
+
}));
|
|
154
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
155
|
+
const { uri } = request.params;
|
|
156
|
+
try {
|
|
157
|
+
return await readResource(uri);
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
// Surface the curated upgrade/auth message (or other error) as resource
|
|
161
|
+
// text rather than throwing — IDEs render it directly to the developer.
|
|
162
|
+
const payload = formatToolError(e);
|
|
163
|
+
return {
|
|
164
|
+
contents: [
|
|
165
|
+
{
|
|
166
|
+
uri,
|
|
167
|
+
mimeType: 'application/json',
|
|
168
|
+
text: JSON.stringify(payload, null, 2),
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
// ─── Prompts ────────────────────────────────────────────────────────────
|
|
175
|
+
server.setRequestHandler(ListPromptsRequestSchema, async () => ({
|
|
176
|
+
prompts: PROMPTS.map((p) => ({
|
|
177
|
+
name: p.name,
|
|
178
|
+
description: p.description,
|
|
179
|
+
arguments: p.arguments,
|
|
180
|
+
})),
|
|
181
|
+
}));
|
|
182
|
+
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
183
|
+
const { name, arguments: args } = request.params;
|
|
184
|
+
return getPrompt(name, (args ?? {}));
|
|
185
|
+
});
|
|
134
186
|
return server;
|
|
135
187
|
}
|
|
136
188
|
async function main() {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,4CAA4C;AAC5C,EAAE;AACF,iEAAiE;AACjE,uEAAuE;AACvE,uEAAuE;AACvE,UAAU;AACV,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,yEAAyE;AACzE,wEAAwE;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface PromptArg {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
required: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface PromptDef {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
arguments: PromptArg[];
|
|
10
|
+
}
|
|
11
|
+
export declare const PROMPTS: PromptDef[];
|
|
12
|
+
type Args = Record<string, string | undefined>;
|
|
13
|
+
export declare function getPrompt(name: string, args: Args): {
|
|
14
|
+
description?: string;
|
|
15
|
+
messages: {
|
|
16
|
+
role: 'user';
|
|
17
|
+
content: {
|
|
18
|
+
type: 'text';
|
|
19
|
+
text: string;
|
|
20
|
+
};
|
|
21
|
+
}[];
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,SAAS,EAAE,CAAA;CACvB;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,EA4B9B,CAAA;AAUD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAE9C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG;IACnD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,CAAA;CACtE,CAiEA"}
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// MCP Prompts — reusable, parameterized templates an IDE/agent can invoke.
|
|
2
|
+
//
|
|
3
|
+
// These are pure templates (no network, no API key). They encode CogniLead's
|
|
4
|
+
// opinionated playbooks so an agent produces on-brand, compliance-aware output
|
|
5
|
+
// and knows which CogniLead tools to call next.
|
|
6
|
+
export const PROMPTS = [
|
|
7
|
+
{
|
|
8
|
+
name: 'cold-outbound-sequence',
|
|
9
|
+
description: 'Draft a compliant 3-step cold-outbound email sequence for a product and ICP, ready to load into a CogniLead campaign.',
|
|
10
|
+
arguments: [
|
|
11
|
+
{ name: 'product', description: 'The product being pitched.', required: true },
|
|
12
|
+
{ name: 'icp', description: 'Ideal customer profile / who you are emailing.', required: true },
|
|
13
|
+
{ name: 'tone', description: 'Voice, e.g. "direct technical", "warm". Defaults to direct.', required: false },
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'deliverability-triage',
|
|
18
|
+
description: 'Diagnose why a domain may be landing in spam and produce a prioritized fix list.',
|
|
19
|
+
arguments: [
|
|
20
|
+
{ name: 'domain', description: 'The sending domain to triage.', required: true },
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'warmup-plan',
|
|
25
|
+
description: 'Recommend a warmup ramp for a new sending domain before running real campaigns.',
|
|
26
|
+
arguments: [
|
|
27
|
+
{ name: 'domain', description: 'The new sending domain.', required: true },
|
|
28
|
+
{ name: 'target_daily_volume', description: 'Eventual daily send target, e.g. 200.', required: false },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
function userMessage(text) {
|
|
33
|
+
return {
|
|
34
|
+
messages: [
|
|
35
|
+
{ role: 'user', content: { type: 'text', text } },
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function getPrompt(name, args) {
|
|
40
|
+
switch (name) {
|
|
41
|
+
case 'cold-outbound-sequence': {
|
|
42
|
+
const product = args.product ?? '<product>';
|
|
43
|
+
const icp = args.icp ?? '<ideal customer profile>';
|
|
44
|
+
const tone = args.tone ?? 'direct, technical';
|
|
45
|
+
return {
|
|
46
|
+
description: `Cold-outbound sequence for ${product}`,
|
|
47
|
+
...userMessage(`Write a compliant 3-step cold-outbound email sequence.
|
|
48
|
+
|
|
49
|
+
Product: ${product}
|
|
50
|
+
ICP: ${icp}
|
|
51
|
+
Tone: ${tone}
|
|
52
|
+
|
|
53
|
+
Rules:
|
|
54
|
+
- Step 1: lead with a specific, verifiable hook about the recipient; one clear ask. Keep under 90 words.
|
|
55
|
+
- Step 2 (follow-up): new angle or proof point, not "just bumping this".
|
|
56
|
+
- Step 3 (break-up): short, low-pressure, easy yes/no.
|
|
57
|
+
- Every email must read as if a human wrote it. No spammy phrasing, no false urgency.
|
|
58
|
+
- Each email must work alongside a one-click unsubscribe footer (CogniLead adds RFC 8058 headers automatically) — do not write your own unsubscribe line.
|
|
59
|
+
- For each step return: subject, body (markdown), and the suggested send delay in days.
|
|
60
|
+
|
|
61
|
+
After drafting, suggest calling the CogniLead "draft_pitch" tool to personalize step 1 per lead, then "ingest_lead" + "run_campaign" to send through the warmed pool.`),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
case 'deliverability-triage': {
|
|
65
|
+
const domain = args.domain ?? '<domain>';
|
|
66
|
+
return {
|
|
67
|
+
description: `Deliverability triage for ${domain}`,
|
|
68
|
+
...userMessage(`Diagnose why mail from "${domain}" might be landing in spam, then give a prioritized fix list.
|
|
69
|
+
|
|
70
|
+
Start by calling the CogniLead "check_deliverability" tool for ${domain} to read its SPF and DMARC records. Then assess, in order:
|
|
71
|
+
1. Authentication: SPF (policy, lookup count, duplicates), DKIM presence, DMARC (policy, rua, pct).
|
|
72
|
+
2. Reputation & infrastructure: domain age, whether it's warmed, shared vs dedicated IP, blacklist exposure.
|
|
73
|
+
3. Content & list hygiene: spam-trigger phrasing, link/image ratio, list quality, suppression of bounces/opt-outs.
|
|
74
|
+
4. Volume pattern: sudden ramps vs gradual warmup.
|
|
75
|
+
|
|
76
|
+
Output a table: issue · severity (high/med/low) · fix. End with the single highest-impact action. Note where CogniLead's warmed pool and reputation circuit-breaker remove the manual work.`),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
case 'warmup-plan': {
|
|
80
|
+
const domain = args.domain ?? '<domain>';
|
|
81
|
+
const vol = args.target_daily_volume ?? '200';
|
|
82
|
+
return {
|
|
83
|
+
description: `Warmup plan for ${domain}`,
|
|
84
|
+
...userMessage(`Produce a warmup ramp for the new sending domain "${domain}" targeting ${vol} emails/day.
|
|
85
|
+
|
|
86
|
+
Cover:
|
|
87
|
+
- Pre-flight: SPF, DKIM, DMARC, custom tracking domain, and a few weeks of domain age before cold sends.
|
|
88
|
+
- A week-by-week volume ramp from a low daily count up to ${vol}/day, with safe step increases and reply-rate / spam-rate guardrails.
|
|
89
|
+
- What to monitor (Google Postmaster reputation, bounce rate, spam-complaint rate) and the thresholds at which to pause.
|
|
90
|
+
- When it's safe to begin real campaigns.
|
|
91
|
+
|
|
92
|
+
Present the ramp as a week-by-week table. Note that CogniLead's managed pool runs peer-to-peer warming and auto-pauses a domain on reputation drift, so this ramp can be delegated rather than hand-run.`),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
default:
|
|
96
|
+
throw new Error(`Unknown prompt: ${name}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,gDAAgD;AAchD,MAAM,CAAC,MAAM,OAAO,GAAgB;IAClC;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,uHAAuH;QACzH,SAAS,EAAE;YACT,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4BAA4B,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9E,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,gDAAgD,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9F,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,6DAA6D,EAAE,QAAQ,EAAE,KAAK,EAAE;SAC9G;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,kFAAkF;QACpF,SAAS,EAAE;YACT,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE;SACjF;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,iFAAiF;QACnF,SAAS,EAAE;YACT,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC1E,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,uCAAuC,EAAE,QAAQ,EAAE,KAAK,EAAE;SACvG;KACF;CACF,CAAA;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO;QACL,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,EAAE;SACpE;KACF,CAAA;AACH,CAAC;AAID,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAU;IAIhD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,wBAAwB,CAAC,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,CAAA;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,0BAA0B,CAAA;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,mBAAmB,CAAA;YAC7C,OAAO;gBACL,WAAW,EAAE,8BAA8B,OAAO,EAAE;gBACpD,GAAG,WAAW,CACZ;;WAEC,OAAO;OACX,GAAG;QACF,IAAI;;;;;;;;;;sKAU0J,CAC7J;aACF,CAAA;QACH,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAA;YACxC,OAAO;gBACL,WAAW,EAAE,6BAA6B,MAAM,EAAE;gBAClD,GAAG,WAAW,CACZ,2BAA2B,MAAM;;iEAEsB,MAAM;;;;;;4LAMqH,CACnL;aACF,CAAA;QACH,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAA;YACxC,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAA;YAC7C,OAAO;gBACL,WAAW,EAAE,mBAAmB,MAAM,EAAE;gBACxC,GAAG,WAAW,CACZ,qDAAqD,MAAM,eAAe,GAAG;;;;4DAI3B,GAAG;;;;yMAI0I,CAChM;aACF,CAAA;QACH,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ResourceDef {
|
|
2
|
+
uri: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
mimeType: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const RESOURCES: ResourceDef[];
|
|
8
|
+
export declare function readResource(uri: string): Promise<{
|
|
9
|
+
contents: {
|
|
10
|
+
uri: string;
|
|
11
|
+
mimeType: string;
|
|
12
|
+
text: string;
|
|
13
|
+
}[];
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,SAAS,EAAE,WAAW,EA6BlC,CAAA;AA8BD,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM;;;;;;GAa7C"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// MCP Resources — read-only context an IDE/agent can pull in.
|
|
2
|
+
//
|
|
3
|
+
// `cognilead://docs` is static (no network, always available). The rest map
|
|
4
|
+
// to the hosted /api/v1 surface and require a CogniLead API key; reading one
|
|
5
|
+
// without a key throws McpAuthError (via authHeaders) which the index handler
|
|
6
|
+
// renders as the curated upgrade message — the same acquisition moment as the
|
|
7
|
+
// gated tools.
|
|
8
|
+
import { apiGet } from './api-client.js';
|
|
9
|
+
export const RESOURCES = [
|
|
10
|
+
{
|
|
11
|
+
uri: 'cognilead://docs',
|
|
12
|
+
name: 'CogniLead documentation index',
|
|
13
|
+
description: 'Links to the CogniLead docs (architecture, outbound email, deliverability, MCP, API). Use to ground answers about how CogniLead works. No API key required.',
|
|
14
|
+
mimeType: 'application/json',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
uri: 'cognilead://sends/recent',
|
|
18
|
+
name: 'Recent sends',
|
|
19
|
+
description: 'The most recent outbound sends for your tenant with delivery state (delivered, bounced, replied, unsubscribed). Requires a CogniLead API key.',
|
|
20
|
+
mimeType: 'application/json',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
uri: 'cognilead://suppressions',
|
|
24
|
+
name: 'Suppression list',
|
|
25
|
+
description: 'Addresses and domains currently suppressed for your tenant (opt-outs, bounces, complaints). Requires a CogniLead API key.',
|
|
26
|
+
mimeType: 'application/json',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
uri: 'cognilead://pool/mailboxes',
|
|
30
|
+
name: 'Reserved warmed mailboxes',
|
|
31
|
+
description: 'The warmed sender mailboxes reserved by your tenant and their warmup status. Requires a CogniLead API key.',
|
|
32
|
+
mimeType: 'application/json',
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
const DOCS_INDEX = {
|
|
36
|
+
product: 'CogniLead — global, compliance-first cold-email deliverability',
|
|
37
|
+
site: 'https://cognilead.ai',
|
|
38
|
+
docs: [
|
|
39
|
+
{ slug: 'architecture', url: 'https://cognilead.ai/docs/architecture' },
|
|
40
|
+
{ slug: 'outbound-email', url: 'https://cognilead.ai/docs/outbound-email' },
|
|
41
|
+
{ slug: 'deliverability', url: 'https://cognilead.ai/docs/deliverability' },
|
|
42
|
+
{ slug: 'mcp', url: 'https://cognilead.ai/docs/mcp' },
|
|
43
|
+
{ slug: 'api', url: 'https://cognilead.ai/api/v1/docs' },
|
|
44
|
+
],
|
|
45
|
+
free_tools: [
|
|
46
|
+
'https://cognilead.ai/tools/spf-checker',
|
|
47
|
+
'https://cognilead.ai/tools/dmarc-checker',
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
function asJson(uri, data) {
|
|
51
|
+
return {
|
|
52
|
+
contents: [
|
|
53
|
+
{
|
|
54
|
+
uri,
|
|
55
|
+
mimeType: 'application/json',
|
|
56
|
+
text: JSON.stringify(data, null, 2),
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export async function readResource(uri) {
|
|
62
|
+
switch (uri) {
|
|
63
|
+
case 'cognilead://docs':
|
|
64
|
+
return asJson(uri, DOCS_INDEX);
|
|
65
|
+
case 'cognilead://sends/recent':
|
|
66
|
+
return asJson(uri, await apiGet('/api/v1/sends'));
|
|
67
|
+
case 'cognilead://suppressions':
|
|
68
|
+
return asJson(uri, await apiGet('/api/v1/suppressions'));
|
|
69
|
+
case 'cognilead://pool/mailboxes':
|
|
70
|
+
return asJson(uri, await apiGet('/api/v1/pool/my-mailboxes'));
|
|
71
|
+
default:
|
|
72
|
+
throw new Error(`Unknown resource URI: ${uri}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,eAAe;AAEf,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AASxC,MAAM,CAAC,MAAM,SAAS,GAAkB;IACtC;QACE,GAAG,EAAE,kBAAkB;QACvB,IAAI,EAAE,+BAA+B;QACrC,WAAW,EACT,6JAA6J;QAC/J,QAAQ,EAAE,kBAAkB;KAC7B;IACD;QACE,GAAG,EAAE,0BAA0B;QAC/B,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,+IAA+I;QACjJ,QAAQ,EAAE,kBAAkB;KAC7B;IACD;QACE,GAAG,EAAE,0BAA0B;QAC/B,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,2HAA2H;QAC7H,QAAQ,EAAE,kBAAkB;KAC7B;IACD;QACE,GAAG,EAAE,4BAA4B;QACjC,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,4GAA4G;QAC9G,QAAQ,EAAE,kBAAkB;KAC7B;CACF,CAAA;AAED,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE,gEAAgE;IACzE,IAAI,EAAE,sBAAsB;IAC5B,IAAI,EAAE;QACJ,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,wCAAwC,EAAE;QACvE,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,0CAA0C,EAAE;QAC3E,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,0CAA0C,EAAE;QAC3E,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,+BAA+B,EAAE;QACrD,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,kCAAkC,EAAE;KACzD;IACD,UAAU,EAAE;QACV,wCAAwC;QACxC,0CAA0C;KAC3C;CACF,CAAA;AAED,SAAS,MAAM,CAAC,GAAW,EAAE,IAAa;IACxC,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,GAAG;gBACH,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACpC;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QAChC,KAAK,0BAA0B;YAC7B,OAAO,MAAM,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,CAAA;QACnD,KAAK,0BAA0B;YAC7B,OAAO,MAAM,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAC1D,KAAK,4BAA4B;YAC/B,OAAO,MAAM,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAA;QAC/D;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAA;IACnD,CAAC;AACH,CAAC"}
|
package/dist/schemas.d.ts
CHANGED
|
@@ -59,7 +59,7 @@ export declare const DraftPitchJsonSchema: {
|
|
|
59
59
|
};
|
|
60
60
|
readonly target_product: {
|
|
61
61
|
readonly type: "string";
|
|
62
|
-
readonly description: "Your product being pitched, e.g.
|
|
62
|
+
readonly description: "Your product being pitched, e.g. payprimitives, medisuisse";
|
|
63
63
|
};
|
|
64
64
|
readonly signal: {
|
|
65
65
|
readonly type: "object";
|
|
@@ -324,6 +324,26 @@ export declare const SuppressJsonSchema: {
|
|
|
324
324
|
readonly additionalProperties: false;
|
|
325
325
|
readonly description: "Either email or domain must be provided.";
|
|
326
326
|
};
|
|
327
|
+
export declare const CheckDeliverabilityInput: z.ZodObject<{
|
|
328
|
+
domain: z.ZodString;
|
|
329
|
+
}, "strip", z.ZodTypeAny, {
|
|
330
|
+
domain: string;
|
|
331
|
+
}, {
|
|
332
|
+
domain: string;
|
|
333
|
+
}>;
|
|
334
|
+
export type CheckDeliverabilityInput = z.infer<typeof CheckDeliverabilityInput>;
|
|
335
|
+
export declare const CheckDeliverabilityJsonSchema: {
|
|
336
|
+
readonly type: "object";
|
|
337
|
+
readonly required: readonly ["domain"];
|
|
338
|
+
readonly properties: {
|
|
339
|
+
readonly domain: {
|
|
340
|
+
readonly type: "string";
|
|
341
|
+
readonly minLength: 3;
|
|
342
|
+
readonly description: "Bare domain to check, e.g. acme.com (no protocol, no path).";
|
|
343
|
+
};
|
|
344
|
+
};
|
|
345
|
+
readonly additionalProperties: false;
|
|
346
|
+
};
|
|
327
347
|
export declare const GenerateSeoContentInput: z.ZodObject<{
|
|
328
348
|
kind: z.ZodEnum<["blog", "landing", "recommendations"]>;
|
|
329
349
|
product: z.ZodString;
|
package/dist/schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAevB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BvB,CAAA;AAIV,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBxB,CAAA;AAKV,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BvB,CAAA;AAIV,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;CAQxB,CAAA;AAIV,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;EAgBvB,CAAA;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAEzD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;CAoBrB,CAAA;AAIV,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;EAOlC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAY/B,CAAA"}
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAevB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BvB,CAAA;AAIV,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBxB,CAAA;AAKV,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BvB,CAAA;AAIV,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;CAQxB,CAAA;AAIV,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;EAgBvB,CAAA;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAEzD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;CAoBrB,CAAA;AAKV,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E,eAAO,MAAM,6BAA6B;;;;;;;;;;;CAWhC,CAAA;AAIV,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;EAOlC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAY/B,CAAA"}
|
package/dist/schemas.js
CHANGED
|
@@ -31,7 +31,7 @@ export const DraftPitchJsonSchema = {
|
|
|
31
31
|
company_name: { type: 'string', minLength: 1 },
|
|
32
32
|
target_product: {
|
|
33
33
|
type: 'string',
|
|
34
|
-
description: 'Your product being pitched, e.g.
|
|
34
|
+
description: 'Your product being pitched, e.g. payprimitives, medisuisse',
|
|
35
35
|
},
|
|
36
36
|
signal: {
|
|
37
37
|
type: 'object',
|
|
@@ -181,6 +181,23 @@ export const SuppressJsonSchema = {
|
|
|
181
181
|
additionalProperties: false,
|
|
182
182
|
description: 'Either email or domain must be provided.',
|
|
183
183
|
};
|
|
184
|
+
// ─── check_deliverability ───────────────────────────────────────────────
|
|
185
|
+
// Free, local DNS check (SPF + DMARC). No API key.
|
|
186
|
+
export const CheckDeliverabilityInput = z.object({
|
|
187
|
+
domain: z.string().min(3),
|
|
188
|
+
});
|
|
189
|
+
export const CheckDeliverabilityJsonSchema = {
|
|
190
|
+
type: 'object',
|
|
191
|
+
required: ['domain'],
|
|
192
|
+
properties: {
|
|
193
|
+
domain: {
|
|
194
|
+
type: 'string',
|
|
195
|
+
minLength: 3,
|
|
196
|
+
description: 'Bare domain to check, e.g. acme.com (no protocol, no path).',
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
additionalProperties: false,
|
|
200
|
+
};
|
|
184
201
|
// ─── generate_seo_content ───────────────────────────────────────────────
|
|
185
202
|
export const GenerateSeoContentInput = z.object({
|
|
186
203
|
kind: z.enum(['blog', 'landing', 'recommendations']),
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,0EAA0E;AAC1E,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,uEAAuE;AACvE,4BAA4B;AAE5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,2EAA2E;AAE3E,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAEpC,2EAA2E;AAE3E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,WAAW;IACnB,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;CACpC,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,CAAC;IACxE,UAAU,EAAE;QACV,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE;QAC9F,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;QAC9C,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-deliverability.d.ts","sourceRoot":"","sources":["../../src/tools/check-deliverability.ts"],"names":[],"mappings":"AA+GA,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAuB7E"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// cognilead.check_deliverability — FREE, local, no API key.
|
|
2
|
+
//
|
|
3
|
+
// Reads SPF + DMARC TXT records for a domain via Node's resolver and grades
|
|
4
|
+
// them. No network beyond DNS, no hosted API call — this is a top-of-funnel
|
|
5
|
+
// acquisition tool an agent can run for any domain. Mirrors the logic behind
|
|
6
|
+
// the public web tools at /tools/spf-checker and /tools/dmarc-checker.
|
|
7
|
+
import { promises as dns } from 'node:dns';
|
|
8
|
+
import { CheckDeliverabilityInput } from '../schemas.js';
|
|
9
|
+
function normalizeDomain(raw) {
|
|
10
|
+
let d = raw.trim().toLowerCase();
|
|
11
|
+
d = d.replace(/^https?:\/\//, '').replace(/^mailto:/, '');
|
|
12
|
+
d = d.split('/')[0].split('?')[0].split('@').pop() ?? d;
|
|
13
|
+
d = d.replace(/\.$/, '');
|
|
14
|
+
if (d.length > 253)
|
|
15
|
+
return null;
|
|
16
|
+
if (!/^(?=.{1,253}$)([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/.test(d)) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return d;
|
|
20
|
+
}
|
|
21
|
+
async function resolveTxtJoined(name) {
|
|
22
|
+
try {
|
|
23
|
+
const records = await dns.resolveTxt(name);
|
|
24
|
+
return records.map((chunks) => chunks.join(''));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const worst = (a, b) => {
|
|
31
|
+
const rank = { pass: 0, warn: 1, fail: 2 };
|
|
32
|
+
return rank[a] >= rank[b] ? a : b;
|
|
33
|
+
};
|
|
34
|
+
const rollup = (findings) => findings.reduce((v, f) => worst(v, f.level), 'pass');
|
|
35
|
+
async function spf(domain) {
|
|
36
|
+
const spfs = (await resolveTxtJoined(domain)).filter((t) => t.toLowerCase().startsWith('v=spf1'));
|
|
37
|
+
if (spfs.length === 0) {
|
|
38
|
+
return {
|
|
39
|
+
verdict: 'fail',
|
|
40
|
+
record: null,
|
|
41
|
+
findings: [{ level: 'fail', text: 'No SPF record found — add a v=spf1 TXT record.' }],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const findings = [];
|
|
45
|
+
if (spfs.length > 1) {
|
|
46
|
+
findings.push({ level: 'fail', text: `Multiple SPF records (${spfs.length}); RFC 7208 allows one — receivers permerror.` });
|
|
47
|
+
}
|
|
48
|
+
const record = spfs[0];
|
|
49
|
+
const all = record.match(/[~\-?+]all\b/);
|
|
50
|
+
if (!all)
|
|
51
|
+
findings.push({ level: 'warn', text: 'No "all" mechanism — end with -all or ~all.' });
|
|
52
|
+
else if (all[0] === '+all')
|
|
53
|
+
findings.push({ level: 'fail', text: '"+all" lets anyone send as you — disables SPF.' });
|
|
54
|
+
else if (all[0] === '?all')
|
|
55
|
+
findings.push({ level: 'warn', text: '"?all" is neutral — prefer ~all or -all.' });
|
|
56
|
+
else
|
|
57
|
+
findings.push({ level: 'pass', text: `Ends with "${all[0]}".` });
|
|
58
|
+
const lookups = (record.match(/\b(include|a|mx|ptr|exists|redirect)[:=]/g) ?? []).length;
|
|
59
|
+
if (lookups > 10)
|
|
60
|
+
findings.push({ level: 'fail', text: `~${lookups} DNS lookups — over the limit of 10 (permerror).` });
|
|
61
|
+
else if (lookups >= 8)
|
|
62
|
+
findings.push({ level: 'warn', text: `~${lookups} DNS lookups — close to the limit of 10.` });
|
|
63
|
+
return { verdict: rollup(findings), record, findings };
|
|
64
|
+
}
|
|
65
|
+
async function dmarc(domain) {
|
|
66
|
+
const recs = (await resolveTxtJoined(`_dmarc.${domain}`)).filter((t) => t.toLowerCase().startsWith('v=dmarc1'));
|
|
67
|
+
if (recs.length === 0) {
|
|
68
|
+
return {
|
|
69
|
+
verdict: 'fail',
|
|
70
|
+
record: null,
|
|
71
|
+
findings: [{ level: 'fail', text: `No DMARC record at _dmarc.${domain} — Gmail/Yahoo require it for bulk senders.` }],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const findings = [];
|
|
75
|
+
if (recs.length > 1)
|
|
76
|
+
findings.push({ level: 'fail', text: 'Multiple DMARC records — receivers ignore the policy.' });
|
|
77
|
+
const record = recs[0];
|
|
78
|
+
const tags = Object.fromEntries(record
|
|
79
|
+
.split(';')
|
|
80
|
+
.map((p) => p.trim())
|
|
81
|
+
.filter(Boolean)
|
|
82
|
+
.map((p) => {
|
|
83
|
+
const i = p.indexOf('=');
|
|
84
|
+
return [p.slice(0, i).trim().toLowerCase(), p.slice(i + 1).trim()];
|
|
85
|
+
}));
|
|
86
|
+
const policy = (tags.p ?? '').toLowerCase();
|
|
87
|
+
if (policy === 'reject')
|
|
88
|
+
findings.push({ level: 'pass', text: 'p=reject — strongest policy.' });
|
|
89
|
+
else if (policy === 'quarantine')
|
|
90
|
+
findings.push({ level: 'warn', text: 'p=quarantine — spoofed mail to spam; move to reject.' });
|
|
91
|
+
else if (policy === 'none')
|
|
92
|
+
findings.push({ level: 'warn', text: 'p=none — monitoring only, no enforcement.' });
|
|
93
|
+
else
|
|
94
|
+
findings.push({ level: 'fail', text: 'Missing/invalid p= policy — record ignored.' });
|
|
95
|
+
if (!tags.rua)
|
|
96
|
+
findings.push({ level: 'warn', text: 'No rua= — no aggregate-report visibility.' });
|
|
97
|
+
else
|
|
98
|
+
findings.push({ level: 'pass', text: 'Aggregate reports (rua) configured.' });
|
|
99
|
+
if (tags.pct && tags.pct !== '100')
|
|
100
|
+
findings.push({ level: 'warn', text: `pct=${tags.pct} — applies to only ${tags.pct}% of mail.` });
|
|
101
|
+
return { verdict: rollup(findings), record, findings };
|
|
102
|
+
}
|
|
103
|
+
export async function checkDeliverability(rawInput) {
|
|
104
|
+
const input = CheckDeliverabilityInput.parse(rawInput);
|
|
105
|
+
const domain = normalizeDomain(input.domain);
|
|
106
|
+
if (!domain) {
|
|
107
|
+
return {
|
|
108
|
+
error: {
|
|
109
|
+
code: 'mcp.invalid_domain',
|
|
110
|
+
message: `Not a valid domain: "${input.domain}". Pass a bare domain like example.com.`,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const [spfSection, dmarcSection] = await Promise.all([spf(domain), dmarc(domain)]);
|
|
115
|
+
const overall = worst(spfSection.verdict, dmarcSection.verdict);
|
|
116
|
+
return {
|
|
117
|
+
domain,
|
|
118
|
+
overall_verdict: overall,
|
|
119
|
+
spf: spfSection,
|
|
120
|
+
dmarc: dmarcSection,
|
|
121
|
+
note: overall === 'pass'
|
|
122
|
+
? 'DNS auth looks healthy. CogniLead manages warmed pools + reputation on top of this.'
|
|
123
|
+
: 'Fix the findings above before sending cold — or let CogniLead provision and monitor it for you.',
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=check-deliverability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-deliverability.js","sourceRoot":"","sources":["../../src/tools/check-deliverability.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
//
|
|
3
3
|
// POSTs to ${COGNILEAD_API_URL}/api/v1/leads with Bearer auth. The hosted
|
|
4
4
|
// endpoint runs the same `intersect` stage we'd run locally (suppression,
|
|
5
|
-
// dedup
|
|
5
|
+
// dedup). 409 with a suppression reason is the most
|
|
6
6
|
// likely failure path — we re-surface it as a structured message.
|
|
7
7
|
import { IngestLeadInput } from '../schemas.js';
|
|
8
8
|
import { apiPost } from '../api-client.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-lead.js","sourceRoot":"","sources":["../../src/tools/ingest-lead.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"ingest-lead.js","sourceRoot":"","sources":["../../src/tools/ingest-lead.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,oDAAoD;AACpD,kEAAkE;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAiB;IAChD,iBAAiB,EAAE,CAAA;IACnB,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE7C,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAA0D,CAAA;QACtE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,oCAAoC,GAAG,CAAC,OAAO,IAAI,gBAAgB,IAAI;gBACrE,qEAAqE;gBACrE,0EAA0E,CAC7E,CAAA;QACH,CAAC;QACD,MAAM,CAAC,CAAA;IACT,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score-signal.d.ts","sourceRoot":"","sources":["../../src/tools/score-signal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"score-signal.d.ts","sourceRoot":"","sources":["../../src/tools/score-signal.ts"],"names":[],"mappings":"AAwEA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC/C,SAAS,EAAE;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,cAAc,EAAE,MAAM,CAAA;QACtB,cAAc,EAAE,MAAM,CAAA;KACvB,CAAA;IACD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,GAAG,WAAW,CAAA;CACtC;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0D/E"}
|
|
@@ -27,7 +27,6 @@ const TOOL = 'cognilead.score_signal';
|
|
|
27
27
|
// Product-keyword maps — when a target_product matches a row, those
|
|
28
28
|
// keywords are the ones the scorer looks for in the signal description.
|
|
29
29
|
const PRODUCT_KEYWORDS = {
|
|
30
|
-
chainlog: ['audit', 'audit log', 'compliance', 'sox', 'gdpr', 'soc 2', 'evidence', 'tamper'],
|
|
31
30
|
payprimitives: ['iso 20022', 'pain.008', 'sepa', 'payment', 'reconciliation', 'card', 'acquirer'],
|
|
32
31
|
medisuisse: ['fhir', 'hipaa', 'patient', 'ehr', 'epic', 'cerner', 'health record'],
|
|
33
32
|
agentgate: ['llm', 'agent', 'guardrail', 'prompt injection', 'safety'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score-signal.js","sourceRoot":"","sources":["../../src/tools/score-signal.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,qDAAqD;AACrD,EAAE;AACF,0BAA0B;AAC1B,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,0EAA0E;AAC1E,MAAM;AACN,EAAE;AACF,uEAAuE;AACvE,iCAAiC;AACjC,EAAE;AACF,sEAAsE;AACtE,uDAAuD;AACvD,EAAE;AACF,sBAAsB;AACtB,sBAAsB;AACtB,wDAAwD;AACxD,qBAAqB;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,IAAI,GAAG,wBAAwB,CAAA;AAErC,oEAAoE;AACpE,wEAAwE;AACxE,MAAM,gBAAgB,GAA6B;IACjD,
|
|
1
|
+
{"version":3,"file":"score-signal.js","sourceRoot":"","sources":["../../src/tools/score-signal.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,qDAAqD;AACrD,EAAE;AACF,0BAA0B;AAC1B,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,0EAA0E;AAC1E,MAAM;AACN,EAAE;AACF,uEAAuE;AACvE,iCAAiC;AACjC,EAAE;AACF,sEAAsE;AACtE,uDAAuD;AACvD,EAAE;AACF,sBAAsB;AACtB,sBAAsB;AACtB,wDAAwD;AACxD,qBAAqB;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,IAAI,GAAG,wBAAwB,CAAA;AAErC,oEAAoE;AACpE,wEAAwE;AACxE,MAAM,gBAAgB,GAA6B;IACjD,aAAa,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC;IACjG,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC;IAClF,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,CAAC;IACtE,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,CAAC;CAC3D,CAAA;AACD,gEAAgE;AAChE,MAAM,qBAAqB,GAAG;IAC5B,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;IAChE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ;CACtD,CAAA;AAED,MAAM,cAAc,GAA2B;IAC7C,WAAW,EAAE,GAAG;IAChB,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,GAAG;IAClB,mBAAmB,EAAE,GAAG;IACxB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,GAAG;CAChB,CAAA;AAED,SAAS,aAAa,CAAC,SAA6B;IAClD,IAAI,CAAC,SAAS;QAAE,OAAO,GAAG,CAAA,CAAC,qBAAqB;IAChD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAChC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,GAAG,CAAA;IAChC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,UAAU,CAAA;IAC9C,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,CAAC,CAAA;IAC1B,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,CAAC,CAAA;IAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,QAAkB;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAChC,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAAE,IAAI,EAAE,CAAA;IAC7C,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAiB;IACjD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAEpC,MAAM,WAAW,GAAG;QAClB,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE;QAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;KAC/C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEX,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,IAAI,qBAAqB,CAAA;IAC/F,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1D,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAElD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IAE3D,MAAM,aAAa,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAA;IAEvE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAEnD,MAAM,GAAG,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,UAAU,CAAA;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAE7D,IAAI,kBAA+C,CAAA;IACnD,IAAI,SAAS,IAAI,EAAE;QAAE,kBAAkB,GAAG,OAAO,CAAA;SAC5C,IAAI,SAAS,IAAI,EAAE;QAAE,kBAAkB,GAAG,QAAQ,CAAA;;QAClD,kBAAkB,GAAG,MAAM,CAAA;IAEhC,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,OAAO,IAAI,KAAK,CAAC,cAAc,mBAAmB,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAA;QACxF,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,CAAA;IACxC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,CAAC,MAAM,aAAa,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC1F,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAA;IAEzF,MAAM,MAAM,GAAsB;QAChC,SAAS;QACT,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,kBAAkB;QAClB,SAAS,EAAE;YACT,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAChC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAC5B,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACzC,cAAc,EAAE,UAAU;SAC3B;QACD,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;KAClF,CAAA;IAED,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;IACxB,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,IAAI,MAAM,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC;QAC9F,MAAM,CAAC,YAAY,GAAG,GAAG,MAAM,CAAC,eAAe,mEAAmE,GAAG,CAAC,SAAS,EAAE,CAAA;IACnI,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cognilead/mcp-server",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Model Context Protocol server for CogniLead —
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Model Context Protocol server for CogniLead — tools (draft_pitch, score_signal, check_deliverability, ingest_lead, run_campaign, suppress, generate_seo_content), Resources (sends, suppressions, warmed-pool, docs), and Prompts (cold-outbound-sequence, deliverability-triage, warmup-plan) for Cursor, Claude Desktop, Windsurf.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"cognilead-mcp": "./dist/index.js"
|