govtoolspro-mcp-server 0.1.2 → 0.1.4
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 +26 -2
- package/dist/api/client.js +1 -1
- package/dist/api/client.js.map +1 -1
- package/dist/index.js +32 -27
- package/dist/index.js.map +1 -1
- package/dist/tool-kit/mcp.js +21 -0
- package/dist/tool-kit/mcp.js.map +1 -0
- package/dist/tool-kit/types.js +8 -0
- package/dist/tool-kit/types.js.map +1 -0
- package/dist/tools/analyzeAwardPatterns.js +72 -0
- package/dist/tools/analyzeAwardPatterns.js.map +1 -0
- package/dist/tools/analyzeMarket.js +79 -0
- package/dist/tools/analyzeMarket.js.map +1 -0
- package/dist/tools/balance.js +17 -18
- package/dist/tools/balance.js.map +1 -1
- package/dist/tools/findIncumbents.js +31 -32
- package/dist/tools/findIncumbents.js.map +1 -1
- package/dist/tools/findPartnersNear.js +29 -28
- package/dist/tools/findPartnersNear.js.map +1 -1
- package/dist/tools/getSolicitation.js +36 -37
- package/dist/tools/getSolicitation.js.map +1 -1
- package/dist/tools/lookupLaborRates.js +87 -0
- package/dist/tools/lookupLaborRates.js.map +1 -0
- package/dist/tools/lookupNecoData.js +33 -34
- package/dist/tools/lookupNecoData.js.map +1 -1
- package/dist/tools/predictRecompete.js +26 -27
- package/dist/tools/predictRecompete.js.map +1 -1
- package/dist/tools/scoreGoNoGo.js +30 -31
- package/dist/tools/scoreGoNoGo.js.map +1 -1
- package/package.json +53 -52
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findPartnersNear.js","sourceRoot":"","sources":["../../src/tools/findPartnersNear.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"findPartnersNear.js","sourceRoot":"","sources":["../../src/tools/findPartnersNear.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const getSolicitationDef = {
|
|
2
2
|
name: "get_solicitation",
|
|
3
3
|
description: "Retrieve a single SAM.gov solicitation's structured fields by notice ID (or, best-effort, by solicitation number). " +
|
|
4
4
|
"Returns title, solicitation number, type, NAICS, PSC, set-aside, place of performance, response deadline (with timezone), " +
|
|
@@ -89,41 +89,40 @@ export const getSolicitationTool = {
|
|
|
89
89
|
idempotentHint: true,
|
|
90
90
|
openWorldHint: true,
|
|
91
91
|
},
|
|
92
|
+
async run(ctx, args) {
|
|
93
|
+
const noticeId = typeof args.noticeId === "string" ? args.noticeId : undefined;
|
|
94
|
+
const solicitationNumber = typeof args.solicitationNumber === "string" ? args.solicitationNumber : undefined;
|
|
95
|
+
if (!noticeId && !solicitationNumber) {
|
|
96
|
+
throw new Error("Provide either noticeId or solicitationNumber");
|
|
97
|
+
}
|
|
98
|
+
const body = {};
|
|
99
|
+
if (noticeId)
|
|
100
|
+
body.noticeId = noticeId;
|
|
101
|
+
if (solicitationNumber)
|
|
102
|
+
body.solicitationNumber = solicitationNumber;
|
|
103
|
+
if (typeof args.includeAttachments === "boolean")
|
|
104
|
+
body.includeAttachments = args.includeAttachments;
|
|
105
|
+
return ctx.post("/get-solicitation", body);
|
|
106
|
+
},
|
|
107
|
+
toText(data, disclaimer) {
|
|
108
|
+
const pop = data.placeOfPerformance;
|
|
109
|
+
const popStr = pop
|
|
110
|
+
? [pop.city, pop.state, pop.zip].filter(Boolean).join(", ")
|
|
111
|
+
: "n/a";
|
|
112
|
+
const poc = data.pointOfContact?.[0];
|
|
113
|
+
const lines = [
|
|
114
|
+
`${data.title || "(untitled)"} ${data.solicitationNumber ? `[${data.solicitationNumber}]` : ""}`.trim(),
|
|
115
|
+
`Type: ${data.typeLabel || data.type || "n/a"}${data.cancelled ? " — CANCELLED" : ""}${data.archived ? " — ARCHIVED" : ""}`,
|
|
116
|
+
`NAICS: ${data.naicsCode || "n/a"}${data.naicsCodes && data.naicsCodes.length > 1 ? ` (+${data.naicsCodes.length - 1} more)` : ""} | PSC: ${data.pscCode || "n/a"} | Set-aside: ${data.setAside || "none"}`,
|
|
117
|
+
`Response deadline: ${data.responseDeadline || "n/a"}${data.responseTimeZone ? ` (${data.responseTimeZone})` : ""}`,
|
|
118
|
+
`Place of performance: ${popStr}`,
|
|
119
|
+
poc ? `Primary contact: ${poc.fullName || "n/a"}${poc.email ? ` <${poc.email}>` : ""}${poc.phone ? ` ${poc.phone}` : ""}` : null,
|
|
120
|
+
data.attachments ? `Attachments: ${data.attachments.length}${data.attachmentsError ? ` (lookup error: ${data.attachmentsError})` : ""}` : null,
|
|
121
|
+
data.link ? `Link: ${data.link}` : null,
|
|
122
|
+
data.description ? `\nDescription:\n${data.description.slice(0, 600)}${data.description.length > 600 ? " …" : ""}` : null,
|
|
123
|
+
disclaimer ? `\n${disclaimer}` : null,
|
|
124
|
+
].filter((s) => s !== null);
|
|
125
|
+
return lines.join("\n");
|
|
126
|
+
},
|
|
92
127
|
};
|
|
93
|
-
export async function runGetSolicitation(api, args) {
|
|
94
|
-
const noticeId = typeof args.noticeId === "string" ? args.noticeId : undefined;
|
|
95
|
-
const solicitationNumber = typeof args.solicitationNumber === "string" ? args.solicitationNumber : undefined;
|
|
96
|
-
if (!noticeId && !solicitationNumber) {
|
|
97
|
-
throw new Error("Provide either noticeId or solicitationNumber");
|
|
98
|
-
}
|
|
99
|
-
const body = {};
|
|
100
|
-
if (noticeId)
|
|
101
|
-
body.noticeId = noticeId;
|
|
102
|
-
if (solicitationNumber)
|
|
103
|
-
body.solicitationNumber = solicitationNumber;
|
|
104
|
-
if (typeof args.includeAttachments === "boolean")
|
|
105
|
-
body.includeAttachments = args.includeAttachments;
|
|
106
|
-
const { data, disclaimer } = await api.post("/get-solicitation", body);
|
|
107
|
-
const pop = data.placeOfPerformance;
|
|
108
|
-
const popStr = pop
|
|
109
|
-
? [pop.city, pop.state, pop.zip].filter(Boolean).join(", ")
|
|
110
|
-
: "n/a";
|
|
111
|
-
const poc = data.pointOfContact?.[0];
|
|
112
|
-
const lines = [
|
|
113
|
-
`${data.title || "(untitled)"} ${data.solicitationNumber ? `[${data.solicitationNumber}]` : ""}`.trim(),
|
|
114
|
-
`Type: ${data.typeLabel || data.type || "n/a"}${data.cancelled ? " — CANCELLED" : ""}${data.archived ? " — ARCHIVED" : ""}`,
|
|
115
|
-
`NAICS: ${data.naicsCode || "n/a"}${data.naicsCodes && data.naicsCodes.length > 1 ? ` (+${data.naicsCodes.length - 1} more)` : ""} | PSC: ${data.pscCode || "n/a"} | Set-aside: ${data.setAside || "none"}`,
|
|
116
|
-
`Response deadline: ${data.responseDeadline || "n/a"}${data.responseTimeZone ? ` (${data.responseTimeZone})` : ""}`,
|
|
117
|
-
`Place of performance: ${popStr}`,
|
|
118
|
-
poc ? `Primary contact: ${poc.fullName || "n/a"}${poc.email ? ` <${poc.email}>` : ""}${poc.phone ? ` ${poc.phone}` : ""}` : null,
|
|
119
|
-
data.attachments ? `Attachments: ${data.attachments.length}${data.attachmentsError ? ` (lookup error: ${data.attachmentsError})` : ""}` : null,
|
|
120
|
-
data.link ? `Link: ${data.link}` : null,
|
|
121
|
-
data.description ? `\nDescription:\n${data.description.slice(0, 600)}${data.description.length > 600 ? " …" : ""}` : null,
|
|
122
|
-
disclaimer ? `\n${disclaimer}` : null,
|
|
123
|
-
].filter((s) => s !== null);
|
|
124
|
-
return {
|
|
125
|
-
content: [{ type: "text", text: lines.join("\n") }],
|
|
126
|
-
structuredContent: data,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
128
|
//# sourceMappingURL=getSolicitation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSolicitation.js","sourceRoot":"","sources":["../../src/tools/getSolicitation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getSolicitation.js","sourceRoot":"","sources":["../../src/tools/getSolicitation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export const lookupLaborRatesDef = {
|
|
2
|
+
name: "lookup_labor_rates",
|
|
3
|
+
description: "Benchmark federal labor rates for a NAICS code and/or a specific labor category. Returns GSA CALC " +
|
|
4
|
+
"awarded ceiling rates (min/median/max by category) plus BLS OEWS wage data with a +55% government " +
|
|
5
|
+
"wrap (loaded hourly) estimate. Free. Public GSA + BLS data — verify allowable rates against the RFP.",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
naicsCode: { type: "string", description: "NAICS code — maps to GSA labor categories + BLS SOC occupations." },
|
|
10
|
+
laborCategory: {
|
|
11
|
+
type: "string",
|
|
12
|
+
description: "Specific labor category for a direct GSA search, e.g. 'program manager', 'software engineer'.",
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
additionalProperties: false,
|
|
16
|
+
},
|
|
17
|
+
outputSchema: {
|
|
18
|
+
type: "object",
|
|
19
|
+
properties: {
|
|
20
|
+
gsaRates: {
|
|
21
|
+
type: "array",
|
|
22
|
+
items: {
|
|
23
|
+
type: "object",
|
|
24
|
+
properties: {
|
|
25
|
+
category: { type: "string" },
|
|
26
|
+
minRate: { type: "number" },
|
|
27
|
+
medianRate: { type: "number" },
|
|
28
|
+
maxRate: { type: "number" },
|
|
29
|
+
avgRate: { type: "number" },
|
|
30
|
+
sampleCount: { type: "number" },
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
blsWages: {
|
|
35
|
+
type: "array",
|
|
36
|
+
items: {
|
|
37
|
+
type: "object",
|
|
38
|
+
properties: {
|
|
39
|
+
occupation: { type: "string" },
|
|
40
|
+
socCode: { type: "string" },
|
|
41
|
+
meanHourly: { type: "number" },
|
|
42
|
+
loadedHourly: { type: "number" },
|
|
43
|
+
meanAnnual: { type: "number" },
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
summary: { type: "object", additionalProperties: true },
|
|
48
|
+
},
|
|
49
|
+
required: ["gsaRates", "blsWages"],
|
|
50
|
+
additionalProperties: true,
|
|
51
|
+
},
|
|
52
|
+
annotations: {
|
|
53
|
+
title: "Look up labor rates",
|
|
54
|
+
readOnlyHint: true,
|
|
55
|
+
destructiveHint: false,
|
|
56
|
+
idempotentHint: true,
|
|
57
|
+
openWorldHint: true,
|
|
58
|
+
},
|
|
59
|
+
async run(ctx, args) {
|
|
60
|
+
const naicsCode = typeof args.naicsCode === "string" ? args.naicsCode.trim() : "";
|
|
61
|
+
const laborCategory = typeof args.laborCategory === "string" ? args.laborCategory.trim() : "";
|
|
62
|
+
if (!naicsCode && !laborCategory) {
|
|
63
|
+
throw new Error("Provide naicsCode and/or laborCategory");
|
|
64
|
+
}
|
|
65
|
+
const body = {};
|
|
66
|
+
if (naicsCode)
|
|
67
|
+
body.naicsCode = naicsCode;
|
|
68
|
+
if (laborCategory)
|
|
69
|
+
body.laborCategory = laborCategory;
|
|
70
|
+
return ctx.post("/lookup-labor-rates", body);
|
|
71
|
+
},
|
|
72
|
+
toText(data, disclaimer) {
|
|
73
|
+
const lines = [
|
|
74
|
+
`GSA CALC ceiling rates (${data.gsaRates.length} categor${data.gsaRates.length === 1 ? "y" : "ies"}):`,
|
|
75
|
+
...data.gsaRates.slice(0, 6).map((r) => ` • ${r.category}: $${r.minRate}–$${r.maxRate}/hr (median $${r.medianRate}, n=${r.sampleCount})`),
|
|
76
|
+
"",
|
|
77
|
+
`BLS loaded wage benchmarks (${data.blsWages.length} occupation${data.blsWages.length === 1 ? "" : "s"}):`,
|
|
78
|
+
...data.blsWages.slice(0, 6).map((w) => ` • ${w.occupation} (${w.socCode}): $${w.meanHourly}/hr mean → $${w.loadedHourly}/hr loaded`),
|
|
79
|
+
data.summary?.blendedHourlyRange
|
|
80
|
+
? `\nBlended hourly range: $${data.summary.blendedHourlyRange.low}–$${data.summary.blendedHourlyRange.high} (median $${data.summary.blendedHourlyRange.median})`
|
|
81
|
+
: null,
|
|
82
|
+
disclaimer ? `\n${disclaimer}` : null,
|
|
83
|
+
].filter((s) => s !== null);
|
|
84
|
+
return lines.join("\n");
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=lookupLaborRates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookupLaborRates.js","sourceRoot":"","sources":["../../src/tools/lookupLaborRates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const lookupNecoDataDef = {
|
|
2
2
|
name: "lookup_neco_data",
|
|
3
3
|
description: "Fetch and parse a Navy NECO (Navy Electronic Commerce Online) solicitation page into structured data — " +
|
|
4
4
|
"solicitation number, title, response deadline, NSN/line items, buyer contact, set-aside, and document links. " +
|
|
@@ -55,38 +55,37 @@ export const lookupNecoDataTool = {
|
|
|
55
55
|
idempotentHint: true,
|
|
56
56
|
openWorldHint: true,
|
|
57
57
|
},
|
|
58
|
+
async run(ctx, args) {
|
|
59
|
+
const necoUrl = typeof args.necoUrl === "string" ? args.necoUrl : undefined;
|
|
60
|
+
const solicitationNumber = typeof args.solicitationNumber === "string" ? args.solicitationNumber : undefined;
|
|
61
|
+
if (!necoUrl && !solicitationNumber) {
|
|
62
|
+
throw new Error("Provide either necoUrl or solicitationNumber");
|
|
63
|
+
}
|
|
64
|
+
const body = {};
|
|
65
|
+
if (necoUrl)
|
|
66
|
+
body.necoUrl = necoUrl;
|
|
67
|
+
if (solicitationNumber)
|
|
68
|
+
body.solicitationNumber = solicitationNumber;
|
|
69
|
+
if (typeof args.hkey === "string")
|
|
70
|
+
body.hkey = args.hkey;
|
|
71
|
+
return ctx.post("/lookup-neco-data", body);
|
|
72
|
+
},
|
|
73
|
+
toText(data, disclaimer) {
|
|
74
|
+
const s = data.summary ?? {};
|
|
75
|
+
const lines = [
|
|
76
|
+
`${s.title ?? "(untitled)"} ${s.solicitationNumber ? `[${s.solicitationNumber}]` : ""}`.trim(),
|
|
77
|
+
`Issue date: ${s.issueDate ?? "n/a"} | Response deadline: ${s.responseDeadline ?? "n/a"}`,
|
|
78
|
+
`Contract type: ${s.contractType ?? "n/a"} | Set-aside: ${s.setAside ?? "none"}`,
|
|
79
|
+
s.nsn ? `NSN: ${s.nsn}${s.quantity ? ` | Qty: ${s.quantity}` : ""}` : null,
|
|
80
|
+
s.buyingOffice ? `Buying office: ${s.buyingOffice}` : null,
|
|
81
|
+
s.buyerName || s.buyerEmail || s.buyerPhone
|
|
82
|
+
? `Buyer: ${s.buyerName ?? "n/a"}${s.buyerEmail ? ` <${s.buyerEmail}>` : ""}${s.buyerPhone ? ` ${s.buyerPhone}` : ""}`
|
|
83
|
+
: null,
|
|
84
|
+
s.documentsUrl ? `Documents: ${s.documentsUrl}` : null,
|
|
85
|
+
`Source: ${data.requestedUrl}`,
|
|
86
|
+
disclaimer ? `\n${disclaimer}` : null,
|
|
87
|
+
].filter((s2) => s2 !== null);
|
|
88
|
+
return lines.join("\n");
|
|
89
|
+
},
|
|
58
90
|
};
|
|
59
|
-
export async function runLookupNecoData(api, args) {
|
|
60
|
-
const necoUrl = typeof args.necoUrl === "string" ? args.necoUrl : undefined;
|
|
61
|
-
const solicitationNumber = typeof args.solicitationNumber === "string" ? args.solicitationNumber : undefined;
|
|
62
|
-
if (!necoUrl && !solicitationNumber) {
|
|
63
|
-
throw new Error("Provide either necoUrl or solicitationNumber");
|
|
64
|
-
}
|
|
65
|
-
const body = {};
|
|
66
|
-
if (necoUrl)
|
|
67
|
-
body.necoUrl = necoUrl;
|
|
68
|
-
if (solicitationNumber)
|
|
69
|
-
body.solicitationNumber = solicitationNumber;
|
|
70
|
-
if (typeof args.hkey === "string")
|
|
71
|
-
body.hkey = args.hkey;
|
|
72
|
-
const { data, disclaimer } = await api.post("/lookup-neco-data", body);
|
|
73
|
-
const s = data.summary ?? {};
|
|
74
|
-
const lines = [
|
|
75
|
-
`${s.title ?? "(untitled)"} ${s.solicitationNumber ? `[${s.solicitationNumber}]` : ""}`.trim(),
|
|
76
|
-
`Issue date: ${s.issueDate ?? "n/a"} | Response deadline: ${s.responseDeadline ?? "n/a"}`,
|
|
77
|
-
`Contract type: ${s.contractType ?? "n/a"} | Set-aside: ${s.setAside ?? "none"}`,
|
|
78
|
-
s.nsn ? `NSN: ${s.nsn}${s.quantity ? ` | Qty: ${s.quantity}` : ""}` : null,
|
|
79
|
-
s.buyingOffice ? `Buying office: ${s.buyingOffice}` : null,
|
|
80
|
-
s.buyerName || s.buyerEmail || s.buyerPhone
|
|
81
|
-
? `Buyer: ${s.buyerName ?? "n/a"}${s.buyerEmail ? ` <${s.buyerEmail}>` : ""}${s.buyerPhone ? ` ${s.buyerPhone}` : ""}`
|
|
82
|
-
: null,
|
|
83
|
-
s.documentsUrl ? `Documents: ${s.documentsUrl}` : null,
|
|
84
|
-
`Source: ${data.requestedUrl}`,
|
|
85
|
-
disclaimer ? `\n${disclaimer}` : null,
|
|
86
|
-
].filter((s2) => s2 !== null);
|
|
87
|
-
return {
|
|
88
|
-
content: [{ type: "text", text: lines.join("\n") }],
|
|
89
|
-
structuredContent: data,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
91
|
//# sourceMappingURL=lookupNecoData.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookupNecoData.js","sourceRoot":"","sources":["../../src/tools/lookupNecoData.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lookupNecoData.js","sourceRoot":"","sources":["../../src/tools/lookupNecoData.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const predictRecompeteDef = {
|
|
2
2
|
name: "predict_recompete",
|
|
3
3
|
description: "Discover federal contracts expiring within a window (recompete opportunities) via public USAspending data, " +
|
|
4
4
|
"optionally enriched with procurement-history signals (all-options-exercised, offers received, set-aside, competition type). " +
|
|
@@ -65,31 +65,30 @@ export const predictRecompeteTool = {
|
|
|
65
65
|
idempotentHint: true,
|
|
66
66
|
openWorldHint: true,
|
|
67
67
|
},
|
|
68
|
+
async run(ctx, args) {
|
|
69
|
+
if (args.filters !== undefined && (typeof args.filters !== "object" || Array.isArray(args.filters))) {
|
|
70
|
+
throw new Error("filters must be an object if provided");
|
|
71
|
+
}
|
|
72
|
+
const body = {};
|
|
73
|
+
for (const k of ["filters", "page", "limit", "sortOrder", "enrich", "enrichCount"]) {
|
|
74
|
+
if (args[k] !== undefined)
|
|
75
|
+
body[k] = args[k];
|
|
76
|
+
}
|
|
77
|
+
return ctx.post("/predict-recompete", body);
|
|
78
|
+
},
|
|
79
|
+
toText(data, disclaimer) {
|
|
80
|
+
const lines = [
|
|
81
|
+
`${data.totalCount} recompete candidate(s)${data.hasMore ? " (more available — page through)" : ""}:`,
|
|
82
|
+
...data.contracts.slice(0, 10).map((c, i) => {
|
|
83
|
+
const val = c.awardAmount ? `$${Number(c.awardAmount).toLocaleString()}` : "n/a";
|
|
84
|
+
const days = c.daysUntilExpiration !== undefined ? `${c.daysUntilExpiration}d to expiry` : "expiry n/a";
|
|
85
|
+
const opt = c.procurementHistory?.allOptionsExercised ? " · all options exercised" : "";
|
|
86
|
+
return ` ${i + 1}. ${c.recipientName ?? "n/a"} — ${val} [${c.urgency ?? "?"}, ${days}]${opt}\n ${c.awardId ?? ""} ends ${c.endDate ?? "?"}`;
|
|
87
|
+
}),
|
|
88
|
+
data.contracts.length > 10 ? ` … and ${data.contracts.length - 10} more in structuredContent.contracts` : null,
|
|
89
|
+
disclaimer ? `\n${disclaimer}` : null,
|
|
90
|
+
].filter((s) => s !== null);
|
|
91
|
+
return lines.join("\n");
|
|
92
|
+
},
|
|
68
93
|
};
|
|
69
|
-
export async function runPredictRecompete(api, args) {
|
|
70
|
-
if (args.filters !== undefined && (typeof args.filters !== "object" || Array.isArray(args.filters))) {
|
|
71
|
-
throw new Error("filters must be an object if provided");
|
|
72
|
-
}
|
|
73
|
-
const body = {};
|
|
74
|
-
for (const k of ["filters", "page", "limit", "sortOrder", "enrich", "enrichCount"]) {
|
|
75
|
-
if (args[k] !== undefined)
|
|
76
|
-
body[k] = args[k];
|
|
77
|
-
}
|
|
78
|
-
const { data, disclaimer } = await api.post("/predict-recompete", body);
|
|
79
|
-
const lines = [
|
|
80
|
-
`${data.totalCount} recompete candidate(s)${data.hasMore ? " (more available — page through)" : ""}:`,
|
|
81
|
-
...data.contracts.slice(0, 10).map((c, i) => {
|
|
82
|
-
const val = c.awardAmount ? `$${Number(c.awardAmount).toLocaleString()}` : "n/a";
|
|
83
|
-
const days = c.daysUntilExpiration !== undefined ? `${c.daysUntilExpiration}d to expiry` : "expiry n/a";
|
|
84
|
-
const opt = c.procurementHistory?.allOptionsExercised ? " · all options exercised" : "";
|
|
85
|
-
return ` ${i + 1}. ${c.recipientName ?? "n/a"} — ${val} [${c.urgency ?? "?"}, ${days}]${opt}\n ${c.awardId ?? ""} ends ${c.endDate ?? "?"}`;
|
|
86
|
-
}),
|
|
87
|
-
data.contracts.length > 10 ? ` … and ${data.contracts.length - 10} more in structuredContent.contracts` : null,
|
|
88
|
-
disclaimer ? `\n${disclaimer}` : null,
|
|
89
|
-
].filter((s) => s !== null);
|
|
90
|
-
return {
|
|
91
|
-
content: [{ type: "text", text: lines.join("\n") }],
|
|
92
|
-
structuredContent: data,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
94
|
//# sourceMappingURL=predictRecompete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predictRecompete.js","sourceRoot":"","sources":["../../src/tools/predictRecompete.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"predictRecompete.js","sourceRoot":"","sources":["../../src/tools/predictRecompete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const scoreGoNoGoDef = {
|
|
2
2
|
name: "score_go_no_go",
|
|
3
3
|
description: "Score a federal solicitation as GO / NO-GO (0-100) against a company profile. " +
|
|
4
4
|
"Detects hard blockers (CMMC certification gaps, geographic/OEM constraints, set-aside ineligibility), " +
|
|
@@ -60,35 +60,34 @@ export const scoreGoNoGoTool = {
|
|
|
60
60
|
idempotentHint: true,
|
|
61
61
|
openWorldHint: true,
|
|
62
62
|
},
|
|
63
|
+
async run(ctx, args) {
|
|
64
|
+
if (!Array.isArray(args.documentAnalyses) || args.documentAnalyses.length === 0) {
|
|
65
|
+
throw new Error("documentAnalyses (non-empty array) is required");
|
|
66
|
+
}
|
|
67
|
+
const body = { documentAnalyses: args.documentAnalyses };
|
|
68
|
+
if (args.profile)
|
|
69
|
+
body.profile = args.profile;
|
|
70
|
+
if (args.solicitationData)
|
|
71
|
+
body.solicitationData = args.solicitationData;
|
|
72
|
+
if (args.incumbentData)
|
|
73
|
+
body.incumbentData = args.incumbentData;
|
|
74
|
+
return ctx.post("/score-go-no-go", body);
|
|
75
|
+
},
|
|
76
|
+
toText(data, disclaimer) {
|
|
77
|
+
const blockers = data.blockers ?? [];
|
|
78
|
+
const lines = [
|
|
79
|
+
`Recommendation: ${data.recommendation ?? "n/a"} (score ${data.score ?? "n/a"}/100)`,
|
|
80
|
+
blockers.length > 0
|
|
81
|
+
? `Blockers (${blockers.length}):\n${blockers
|
|
82
|
+
.map((b) => ` • ${b.type ?? "blocker"}: ${b.message ?? b.reason ?? ""}`.trimEnd())
|
|
83
|
+
.join("\n")}`
|
|
84
|
+
: "Blockers: none",
|
|
85
|
+
data.reasons && data.reasons.length > 0
|
|
86
|
+
? `Key reasons:\n${data.reasons.slice(0, 8).map((r) => ` • ${r}`).join("\n")}`
|
|
87
|
+
: null,
|
|
88
|
+
disclaimer ? `\n${disclaimer}` : null,
|
|
89
|
+
].filter((s) => s !== null);
|
|
90
|
+
return lines.join("\n");
|
|
91
|
+
},
|
|
63
92
|
};
|
|
64
|
-
export async function runScoreGoNoGo(api, args) {
|
|
65
|
-
if (!Array.isArray(args.documentAnalyses) || args.documentAnalyses.length === 0) {
|
|
66
|
-
throw new Error("documentAnalyses (non-empty array) is required");
|
|
67
|
-
}
|
|
68
|
-
const body = { documentAnalyses: args.documentAnalyses };
|
|
69
|
-
if (args.profile)
|
|
70
|
-
body.profile = args.profile;
|
|
71
|
-
if (args.solicitationData)
|
|
72
|
-
body.solicitationData = args.solicitationData;
|
|
73
|
-
if (args.incumbentData)
|
|
74
|
-
body.incumbentData = args.incumbentData;
|
|
75
|
-
const { data, disclaimer } = await api.post("/score-go-no-go", body);
|
|
76
|
-
const blockers = data.blockers ?? [];
|
|
77
|
-
const lines = [
|
|
78
|
-
`Recommendation: ${data.recommendation ?? "n/a"} (score ${data.score ?? "n/a"}/100)`,
|
|
79
|
-
blockers.length > 0
|
|
80
|
-
? `Blockers (${blockers.length}):\n${blockers
|
|
81
|
-
.map((b) => ` • ${b.type ?? "blocker"}: ${b.message ?? b.reason ?? ""}`.trimEnd())
|
|
82
|
-
.join("\n")}`
|
|
83
|
-
: "Blockers: none",
|
|
84
|
-
data.reasons && data.reasons.length > 0
|
|
85
|
-
? `Key reasons:\n${data.reasons.slice(0, 8).map((r) => ` • ${r}`).join("\n")}`
|
|
86
|
-
: null,
|
|
87
|
-
disclaimer ? `\n${disclaimer}` : null,
|
|
88
|
-
].filter((s) => s !== null);
|
|
89
|
-
return {
|
|
90
|
-
content: [{ type: "text", text: lines.join("\n") }],
|
|
91
|
-
structuredContent: data,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
93
|
//# sourceMappingURL=scoreGoNoGo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoreGoNoGo.js","sourceRoot":"","sources":["../../src/tools/scoreGoNoGo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scoreGoNoGo.js","sourceRoot":"","sources":["../../src/tools/scoreGoNoGo.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,52 +1,53 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "govtoolspro-mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"mcpName": "io.github.smythmyke/govtoolspro-mcp-server",
|
|
5
|
-
"description": "MCP server for GovToolsPro — go/no-go scoring, incumbent intelligence, teaming-partner search, recompete prediction, Navy NECO lookup, and SAM.gov solicitation retrieval for federal contractors, from Claude Code, Claude Desktop, and Cursor.",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"bin": {
|
|
9
|
-
"govtoolspro-mcp-server": "dist/index.js"
|
|
10
|
-
},
|
|
11
|
-
"main": "dist/index.js",
|
|
12
|
-
"files": [
|
|
13
|
-
"dist",
|
|
14
|
-
"README.md"
|
|
15
|
-
],
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": "tsc",
|
|
18
|
-
"build:watch": "tsc --watch",
|
|
19
|
-
"start": "node dist/index.js",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"mcp
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "govtoolspro-mcp-server",
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"mcpName": "io.github.smythmyke/govtoolspro-mcp-server",
|
|
5
|
+
"description": "MCP server for GovToolsPro — go/no-go scoring, incumbent intelligence, teaming-partner search, recompete prediction, Navy NECO lookup, and SAM.gov solicitation retrieval for federal contractors, from Claude Code, Claude Desktop, and Cursor.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"govtoolspro-mcp-server": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"build:watch": "tsc --watch",
|
|
19
|
+
"start": "node dist/index.js",
|
|
20
|
+
"test": "npm run build && node scripts/protocol-test.mjs && node scripts/totext-test.mjs",
|
|
21
|
+
"smoke": "node scripts/smoke-test.mjs",
|
|
22
|
+
"gen:manifests": "node scripts/gen-manifests.mjs",
|
|
23
|
+
"prepublishOnly": "npm run build"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^22.0.0",
|
|
30
|
+
"typescript": "^5.3.0"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18.0.0"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"mcp",
|
|
37
|
+
"mcp-server",
|
|
38
|
+
"model-context-protocol",
|
|
39
|
+
"govcon",
|
|
40
|
+
"government-contracting",
|
|
41
|
+
"sam.gov",
|
|
42
|
+
"federal-contracting",
|
|
43
|
+
"go-no-go",
|
|
44
|
+
"incumbent",
|
|
45
|
+
"recompete",
|
|
46
|
+
"govtoolspro"
|
|
47
|
+
],
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "https://github.com/smythmyke/govtoolspro-mcp-server"
|
|
51
|
+
},
|
|
52
|
+
"homepage": "https://github.com/smythmyke/govtoolspro-mcp-server"
|
|
53
|
+
}
|