bidcraft-evaluate-mcp 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/README.md +79 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +778 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
package/README.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# bidcraft-evaluate-mcp
|
|
2
|
+
|
|
3
|
+
Bid/no-bid evaluation engine for RFP opportunities. Scores opportunities on 8 dimensions — strategic fit, customer relationship, technical capability, past performance, price competitiveness, resource availability, competitive landscape, and risk profile — to make data-driven pursuit decisions.
|
|
4
|
+
|
|
5
|
+
## Tools
|
|
6
|
+
|
|
7
|
+
### evaluate_opportunity
|
|
8
|
+
Score an RFP/bid opportunity across 8 weighted dimensions and get a clear BID / NO_BID / CONDITIONAL_BID recommendation with confidence level, risk factors, and mitigation strategies.
|
|
9
|
+
|
|
10
|
+
### compare_opportunities
|
|
11
|
+
Rank multiple bid opportunities by expected value, ROI, strategic importance, and urgency. Outputs a prioritized pipeline with pursue/defer/conflict recommendations within your capacity constraints.
|
|
12
|
+
|
|
13
|
+
### analyze_competitive_position
|
|
14
|
+
Assess your competitive strengths and vulnerabilities against known competitors criterion-by-criterion. Generates ghost strategies and identifies where to emphasize differentiators.
|
|
15
|
+
|
|
16
|
+
### estimate_bid_cost
|
|
17
|
+
Calculate the full cost of pursuing an opportunity — labor, review cycles, graphics, travel, subcontractor coordination, and materials. Includes ROI analysis and break-even win rate.
|
|
18
|
+
|
|
19
|
+
### generate_pursuit_plan
|
|
20
|
+
Create a structured capture plan with milestone timeline, team assignments, win themes, discriminators, competitive ghost strategies, risk register, and pre-submission checklist.
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx bidcraft-evaluate-mcp
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Claude Desktop
|
|
29
|
+
|
|
30
|
+
Add to `claude_desktop_config.json`:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"mcpServers": {
|
|
35
|
+
"bidcraft-evaluate": {
|
|
36
|
+
"command": "npx",
|
|
37
|
+
"args": ["-y", "bidcraft-evaluate-mcp"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Example Usage
|
|
44
|
+
|
|
45
|
+
**Evaluate a bid opportunity:**
|
|
46
|
+
```
|
|
47
|
+
Use evaluate_opportunity with opportunity_name "DOD Cyber Program", customer "US Army", contract_value 5000000, contract_type "firm_fixed_price", customer_relationship "existing_customer", pct_requirements_met 85, has_key_personnel true, win_probability 45
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Compare pipeline opportunities:**
|
|
51
|
+
```
|
|
52
|
+
Use compare_opportunities with 3-5 opportunities including contract_value, win_probability, strategic_value, and bid_cost for each
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Analyze competitive position:**
|
|
56
|
+
```
|
|
57
|
+
Use analyze_competitive_position with evaluation_criteria, your_scores, and competitor scores to see where you lead and where you're vulnerable
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Scoring Dimensions
|
|
61
|
+
|
|
62
|
+
| Dimension | Weight | What It Measures |
|
|
63
|
+
|-----------|--------|------------------|
|
|
64
|
+
| Strategic Fit | 15% | Alignment with strategy, market growth, new market entry |
|
|
65
|
+
| Customer Relationship | 15% | Incumbent status, existing rapport, access |
|
|
66
|
+
| Technical Capability | 20% | Requirements coverage, key personnel, solution maturity |
|
|
67
|
+
| Past Performance | 10% | Relevant experience, ratings, references |
|
|
68
|
+
| Price Competitiveness | 15% | Price vs market rate, margin adequacy, contract type risk |
|
|
69
|
+
| Resource Availability | 10% | Staff availability, hiring needs |
|
|
70
|
+
| Competitive Landscape | 10% | Number of competitors, incumbent advantage |
|
|
71
|
+
| Risk Profile | 5% | Contract risk, regulatory, protest likelihood |
|
|
72
|
+
|
|
73
|
+
## Part of BidCraft
|
|
74
|
+
|
|
75
|
+
This MCP server is part of [BidCraft](https://bidcraft.site) — AI-powered RFP proposal generation and bid management platform.
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,778 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
// ── Scoring Constants ─────────────────────────────────────────────────
|
|
6
|
+
const DIMENSION_WEIGHTS = {
|
|
7
|
+
strategic_fit: 15,
|
|
8
|
+
customer_relationship: 15,
|
|
9
|
+
technical_capability: 20,
|
|
10
|
+
past_performance: 10,
|
|
11
|
+
price_competitiveness: 15,
|
|
12
|
+
resource_availability: 10,
|
|
13
|
+
competitive_landscape: 10,
|
|
14
|
+
risk_profile: 5,
|
|
15
|
+
};
|
|
16
|
+
const CONTRACT_TYPE_RISK = {
|
|
17
|
+
firm_fixed_price: 30,
|
|
18
|
+
cost_plus: 10,
|
|
19
|
+
time_and_materials: 15,
|
|
20
|
+
idiq: 20,
|
|
21
|
+
blanket_purchase: 15,
|
|
22
|
+
competitive_bid: 35,
|
|
23
|
+
sole_source: 5,
|
|
24
|
+
};
|
|
25
|
+
const RELATIONSHIP_SCORE = {
|
|
26
|
+
incumbent: 90,
|
|
27
|
+
existing_customer: 75,
|
|
28
|
+
known_prospect: 50,
|
|
29
|
+
cold: 25,
|
|
30
|
+
competitor_incumbent: 15,
|
|
31
|
+
};
|
|
32
|
+
// ── Scoring Functions ─────────────────────────────────────────────────
|
|
33
|
+
function scoreStrategicFit(aligns_with_strategy, market_growth, revenue_significance, // % of annual revenue
|
|
34
|
+
opens_new_market, referenceable) {
|
|
35
|
+
let score = 0;
|
|
36
|
+
const risks = [];
|
|
37
|
+
if (aligns_with_strategy)
|
|
38
|
+
score += 30;
|
|
39
|
+
else
|
|
40
|
+
risks.push("Opportunity does not align with strategic direction");
|
|
41
|
+
if (market_growth)
|
|
42
|
+
score += 20;
|
|
43
|
+
if (opens_new_market)
|
|
44
|
+
score += 20;
|
|
45
|
+
if (referenceable)
|
|
46
|
+
score += 15;
|
|
47
|
+
// Revenue significance: sweet spot is 5-20% of annual revenue
|
|
48
|
+
if (revenue_significance >= 5 && revenue_significance <= 20)
|
|
49
|
+
score += 15;
|
|
50
|
+
else if (revenue_significance > 20) {
|
|
51
|
+
score += 10;
|
|
52
|
+
risks.push(`Contract at ${revenue_significance}% of revenue creates concentration risk`);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
score += 5;
|
|
56
|
+
}
|
|
57
|
+
const rationale = `Strategic fit score based on alignment (${aligns_with_strategy ? "yes" : "no"}), market growth (${market_growth ? "yes" : "no"}), new market (${opens_new_market ? "yes" : "no"}), revenue significance (${revenue_significance}%)`;
|
|
58
|
+
return { score: Math.min(score, 100), rationale, risks };
|
|
59
|
+
}
|
|
60
|
+
function scoreTechnicalCapability(pct_requirements_met, has_key_personnel, has_past_similar_work, needs_teaming, tech_solution_maturity) {
|
|
61
|
+
let score = 0;
|
|
62
|
+
const risks = [];
|
|
63
|
+
score += pct_requirements_met * 0.4; // 0-40 points
|
|
64
|
+
if (has_key_personnel)
|
|
65
|
+
score += 20;
|
|
66
|
+
else
|
|
67
|
+
risks.push("Key personnel not identified or not available");
|
|
68
|
+
if (has_past_similar_work)
|
|
69
|
+
score += 15;
|
|
70
|
+
else
|
|
71
|
+
risks.push("No directly comparable past work");
|
|
72
|
+
if (needs_teaming) {
|
|
73
|
+
score += 5; // Some credit for recognizing the gap
|
|
74
|
+
risks.push("Teaming partner required — adds coordination risk and margin sharing");
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
score += 15;
|
|
78
|
+
}
|
|
79
|
+
score += (tech_solution_maturity / 5) * 10;
|
|
80
|
+
const rationale = `Technical capability: ${pct_requirements_met}% requirements met, solution maturity ${tech_solution_maturity}/5, ${needs_teaming ? "teaming required" : "self-perform capable"}`;
|
|
81
|
+
return { score: Math.min(Math.round(score), 100), rationale, risks };
|
|
82
|
+
}
|
|
83
|
+
function scorePriceCompetitiveness(estimated_price, market_rate, contract_type, margin_target) {
|
|
84
|
+
const risks = [];
|
|
85
|
+
const priceRatio = estimated_price / market_rate;
|
|
86
|
+
let score;
|
|
87
|
+
if (priceRatio <= 0.85) {
|
|
88
|
+
score = 95;
|
|
89
|
+
if (margin_target < 10)
|
|
90
|
+
risks.push("Price is aggressive — margin may be insufficient to cover risk");
|
|
91
|
+
}
|
|
92
|
+
else if (priceRatio <= 0.95) {
|
|
93
|
+
score = 80;
|
|
94
|
+
}
|
|
95
|
+
else if (priceRatio <= 1.05) {
|
|
96
|
+
score = 60;
|
|
97
|
+
}
|
|
98
|
+
else if (priceRatio <= 1.15) {
|
|
99
|
+
score = 35;
|
|
100
|
+
risks.push("Price above market rate — need strong technical/value differentiators");
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
score = 15;
|
|
104
|
+
risks.push("Price significantly above market — low probability of price competitiveness");
|
|
105
|
+
}
|
|
106
|
+
// Adjust for contract type risk
|
|
107
|
+
const typeRisk = CONTRACT_TYPE_RISK[contract_type];
|
|
108
|
+
if (contract_type === "firm_fixed_price" && margin_target < 15) {
|
|
109
|
+
risks.push("FFP contract with thin margin — cost overruns have no recovery mechanism");
|
|
110
|
+
}
|
|
111
|
+
const rationale = `Price competitiveness: estimated ${priceRatio.toFixed(2)}x market rate, ${contract_type.replace(/_/g, " ")} contract, ${margin_target}% target margin`;
|
|
112
|
+
return { score: Math.min(score, 100), rationale, risks };
|
|
113
|
+
}
|
|
114
|
+
function scoreRiskProfile(contract_type, contract_duration_months, protest_likely, regulatory_complexity, // 1-5
|
|
115
|
+
subcontracting_required, security_clearance_needed) {
|
|
116
|
+
const risks = [];
|
|
117
|
+
let riskScore = 0; // Lower is riskier, then we invert
|
|
118
|
+
// Contract type risk
|
|
119
|
+
riskScore += (100 - CONTRACT_TYPE_RISK[contract_type]) * 0.2;
|
|
120
|
+
// Duration risk
|
|
121
|
+
if (contract_duration_months <= 12)
|
|
122
|
+
riskScore += 20;
|
|
123
|
+
else if (contract_duration_months <= 36)
|
|
124
|
+
riskScore += 15;
|
|
125
|
+
else if (contract_duration_months <= 60)
|
|
126
|
+
riskScore += 10;
|
|
127
|
+
else {
|
|
128
|
+
riskScore += 5;
|
|
129
|
+
risks.push(`Long-term contract (${contract_duration_months} months) — forecasting accuracy decreases`);
|
|
130
|
+
}
|
|
131
|
+
// Protest risk
|
|
132
|
+
if (protest_likely) {
|
|
133
|
+
riskScore += 0;
|
|
134
|
+
risks.push("Protest likely — adds 3-6 months delay and legal costs");
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
riskScore += 15;
|
|
138
|
+
}
|
|
139
|
+
// Regulatory complexity
|
|
140
|
+
riskScore += (5 - regulatory_complexity) * 5;
|
|
141
|
+
if (regulatory_complexity >= 4)
|
|
142
|
+
risks.push("High regulatory complexity increases compliance costs");
|
|
143
|
+
// Subcontracting
|
|
144
|
+
if (subcontracting_required) {
|
|
145
|
+
riskScore += 5;
|
|
146
|
+
risks.push("Subcontracting required — supply chain and coordination risk");
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
riskScore += 15;
|
|
150
|
+
}
|
|
151
|
+
// Security clearance
|
|
152
|
+
if (security_clearance_needed) {
|
|
153
|
+
riskScore += 0;
|
|
154
|
+
risks.push("Security clearance requirements may limit available personnel");
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
riskScore += 10;
|
|
158
|
+
}
|
|
159
|
+
const rationale = `Risk profile assessment: ${contract_type.replace(/_/g, " ")}, ${contract_duration_months} months, ${risks.length} risk factors identified`;
|
|
160
|
+
return { score: Math.min(Math.round(riskScore), 100), rationale, risks };
|
|
161
|
+
}
|
|
162
|
+
// ── Server Setup ──────────────────────────────────────────────────────
|
|
163
|
+
const server = new McpServer({
|
|
164
|
+
name: "bidcraft-evaluate-mcp",
|
|
165
|
+
version: "0.2.0",
|
|
166
|
+
});
|
|
167
|
+
// ── Tool: Evaluate Opportunity ────────────────────────────────────────
|
|
168
|
+
server.tool("evaluate_opportunity", "Score an RFP/bid opportunity on 8 dimensions and get a bid/no-bid recommendation with confidence level", {
|
|
169
|
+
opportunity_name: z.string().describe("Name/title of the opportunity"),
|
|
170
|
+
customer: z.string().describe("Customer/agency name"),
|
|
171
|
+
contract_value: z.number().positive().describe("Estimated contract value in USD"),
|
|
172
|
+
contract_type: z.enum(["firm_fixed_price", "cost_plus", "time_and_materials", "idiq", "blanket_purchase", "competitive_bid", "sole_source"]).describe("Contract type"),
|
|
173
|
+
contract_duration_months: z.number().min(1).describe("Contract duration in months"),
|
|
174
|
+
customer_relationship: z.enum(["incumbent", "existing_customer", "known_prospect", "cold", "competitor_incumbent"]).describe("Relationship with the customer"),
|
|
175
|
+
annual_revenue: z.number().positive().describe("Your company's annual revenue for concentration analysis"),
|
|
176
|
+
aligns_with_strategy: z.boolean().describe("Does this align with your strategic direction?"),
|
|
177
|
+
market_growth: z.boolean().describe("Is this in a growing market segment?"),
|
|
178
|
+
opens_new_market: z.boolean().describe("Does this open a new market or capability?"),
|
|
179
|
+
referenceable: z.boolean().describe("Would this be a good reference for future bids?"),
|
|
180
|
+
pct_requirements_met: z.number().min(0).max(100).describe("Percentage of technical requirements you can meet today"),
|
|
181
|
+
has_key_personnel: z.boolean().describe("Do you have the key personnel identified and available?"),
|
|
182
|
+
has_past_similar_work: z.boolean().describe("Do you have directly comparable past performance?"),
|
|
183
|
+
needs_teaming: z.boolean().describe("Do you need a teaming partner to be competitive?"),
|
|
184
|
+
tech_solution_maturity: z.number().min(1).max(5).describe("Solution maturity (1=concept, 5=production-ready)"),
|
|
185
|
+
estimated_price: z.number().positive().describe("Your estimated price"),
|
|
186
|
+
market_rate: z.number().positive().describe("Estimated market rate or government estimate"),
|
|
187
|
+
margin_target: z.number().min(0).max(100).describe("Target margin percentage"),
|
|
188
|
+
known_competitors: z.number().min(0).describe("Number of known competitors"),
|
|
189
|
+
competitor_incumbent: z.boolean().describe("Is there an incumbent competitor?"),
|
|
190
|
+
resource_availability_pct: z.number().min(0).max(100).describe("Percentage of needed resources currently available"),
|
|
191
|
+
protest_likely: z.boolean().describe("Is a bid protest likely?"),
|
|
192
|
+
regulatory_complexity: z.number().min(1).max(5).describe("Regulatory complexity (1=simple, 5=very complex)"),
|
|
193
|
+
subcontracting_required: z.boolean().describe("Is subcontracting required?"),
|
|
194
|
+
security_clearance_needed: z.boolean().describe("Are security clearances needed?"),
|
|
195
|
+
past_performance_rating: z.number().min(0).max(100).optional().describe("Past performance rating (0-100) from similar contracts"),
|
|
196
|
+
must_haves: z.array(z.object({
|
|
197
|
+
requirement: z.string(),
|
|
198
|
+
met: z.boolean(),
|
|
199
|
+
})).optional().describe("Must-have requirements with met/unmet status"),
|
|
200
|
+
}, async (params) => {
|
|
201
|
+
const dimensions = [];
|
|
202
|
+
// 1. Strategic Fit
|
|
203
|
+
const revSignificance = (params.contract_value / (params.contract_duration_months / 12)) / params.annual_revenue * 100;
|
|
204
|
+
const sf = scoreStrategicFit(params.aligns_with_strategy, params.market_growth, revSignificance, params.opens_new_market, params.referenceable);
|
|
205
|
+
dimensions.push({
|
|
206
|
+
dimension: "Strategic Fit",
|
|
207
|
+
score: sf.score,
|
|
208
|
+
weight: DIMENSION_WEIGHTS.strategic_fit,
|
|
209
|
+
weightedScore: (sf.score * DIMENSION_WEIGHTS.strategic_fit) / 100,
|
|
210
|
+
rationale: sf.rationale,
|
|
211
|
+
risks: sf.risks,
|
|
212
|
+
mitigations: sf.risks.map(r => r.includes("concentration") ? "Diversify pipeline to reduce dependency" : "Re-evaluate strategic alignment before committing resources"),
|
|
213
|
+
});
|
|
214
|
+
// 2. Customer Relationship
|
|
215
|
+
const relScore = RELATIONSHIP_SCORE[params.customer_relationship];
|
|
216
|
+
const relRisks = [];
|
|
217
|
+
if (params.customer_relationship === "cold")
|
|
218
|
+
relRisks.push("No existing relationship — requires significant pre-proposal engagement");
|
|
219
|
+
if (params.customer_relationship === "competitor_incumbent")
|
|
220
|
+
relRisks.push("Competitor is incumbent — must demonstrate clear superiority to unseat");
|
|
221
|
+
dimensions.push({
|
|
222
|
+
dimension: "Customer Relationship",
|
|
223
|
+
score: relScore,
|
|
224
|
+
weight: DIMENSION_WEIGHTS.customer_relationship,
|
|
225
|
+
weightedScore: (relScore * DIMENSION_WEIGHTS.customer_relationship) / 100,
|
|
226
|
+
rationale: `Customer relationship: ${params.customer_relationship.replace(/_/g, " ")} with ${params.customer}`,
|
|
227
|
+
risks: relRisks,
|
|
228
|
+
mitigations: relRisks.map(() => "Schedule pre-proposal meeting, attend industry days, leverage existing contacts"),
|
|
229
|
+
});
|
|
230
|
+
// 3. Technical Capability
|
|
231
|
+
const tc = scoreTechnicalCapability(params.pct_requirements_met, params.has_key_personnel, params.has_past_similar_work, params.needs_teaming, params.tech_solution_maturity);
|
|
232
|
+
dimensions.push({
|
|
233
|
+
dimension: "Technical Capability",
|
|
234
|
+
score: tc.score,
|
|
235
|
+
weight: DIMENSION_WEIGHTS.technical_capability,
|
|
236
|
+
weightedScore: (tc.score * DIMENSION_WEIGHTS.technical_capability) / 100,
|
|
237
|
+
rationale: tc.rationale,
|
|
238
|
+
risks: tc.risks,
|
|
239
|
+
mitigations: tc.risks.map(r => r.includes("personnel") ? "Recruit or reallocate key staff immediately" : r.includes("teaming") ? "Identify and engage teaming partners early" : "Build comparable experience through smaller contracts"),
|
|
240
|
+
});
|
|
241
|
+
// 4. Past Performance
|
|
242
|
+
const ppScore = params.past_performance_rating ?? (params.has_past_similar_work ? 70 : 30);
|
|
243
|
+
const ppRisks = [];
|
|
244
|
+
if (ppScore < 50)
|
|
245
|
+
ppRisks.push("Weak or no relevant past performance — significant evaluation weakness");
|
|
246
|
+
dimensions.push({
|
|
247
|
+
dimension: "Past Performance",
|
|
248
|
+
score: ppScore,
|
|
249
|
+
weight: DIMENSION_WEIGHTS.past_performance,
|
|
250
|
+
weightedScore: (ppScore * DIMENSION_WEIGHTS.past_performance) / 100,
|
|
251
|
+
rationale: `Past performance rating: ${ppScore}/100${params.has_past_similar_work ? " (similar work exists)" : " (no similar work)"}`,
|
|
252
|
+
risks: ppRisks,
|
|
253
|
+
mitigations: ppRisks.map(() => "Highlight adjacent relevant experience, use teaming partner's past performance"),
|
|
254
|
+
});
|
|
255
|
+
// 5. Price Competitiveness
|
|
256
|
+
const pc = scorePriceCompetitiveness(params.estimated_price, params.market_rate, params.contract_type, params.margin_target);
|
|
257
|
+
dimensions.push({
|
|
258
|
+
dimension: "Price Competitiveness",
|
|
259
|
+
score: pc.score,
|
|
260
|
+
weight: DIMENSION_WEIGHTS.price_competitiveness,
|
|
261
|
+
weightedScore: (pc.score * DIMENSION_WEIGHTS.price_competitiveness) / 100,
|
|
262
|
+
rationale: pc.rationale,
|
|
263
|
+
risks: pc.risks,
|
|
264
|
+
mitigations: pc.risks.map(r => r.includes("aggressive") ? "Validate cost model, add management reserve" : "Explore value engineering, subcontractor negotiations, or scope clarifications"),
|
|
265
|
+
});
|
|
266
|
+
// 6. Resource Availability
|
|
267
|
+
const raScore = params.resource_availability_pct;
|
|
268
|
+
const raRisks = [];
|
|
269
|
+
if (raScore < 50)
|
|
270
|
+
raRisks.push(`Only ${raScore}% of resources available — significant hiring/allocation needed`);
|
|
271
|
+
else if (raScore < 80)
|
|
272
|
+
raRisks.push(`${raScore}% resource availability — some hiring or reallocation needed`);
|
|
273
|
+
dimensions.push({
|
|
274
|
+
dimension: "Resource Availability",
|
|
275
|
+
score: raScore,
|
|
276
|
+
weight: DIMENSION_WEIGHTS.resource_availability,
|
|
277
|
+
weightedScore: (raScore * DIMENSION_WEIGHTS.resource_availability) / 100,
|
|
278
|
+
rationale: `${raScore}% of needed resources currently available`,
|
|
279
|
+
risks: raRisks,
|
|
280
|
+
mitigations: raRisks.map(() => "Begin recruiting immediately, identify internal transfers, engage staffing partners"),
|
|
281
|
+
});
|
|
282
|
+
// 7. Competitive Landscape
|
|
283
|
+
let compScore;
|
|
284
|
+
const compRisks = [];
|
|
285
|
+
if (params.known_competitors === 0) {
|
|
286
|
+
compScore = 85;
|
|
287
|
+
}
|
|
288
|
+
else if (params.known_competitors <= 2) {
|
|
289
|
+
compScore = 70;
|
|
290
|
+
}
|
|
291
|
+
else if (params.known_competitors <= 5) {
|
|
292
|
+
compScore = 50;
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
compScore = 25;
|
|
296
|
+
compRisks.push(`${params.known_competitors} known competitors — highly competitive field`);
|
|
297
|
+
}
|
|
298
|
+
if (params.competitor_incumbent) {
|
|
299
|
+
compScore = Math.max(compScore - 20, 5);
|
|
300
|
+
compRisks.push("Incumbent competitor has significant advantage in evaluation");
|
|
301
|
+
}
|
|
302
|
+
dimensions.push({
|
|
303
|
+
dimension: "Competitive Landscape",
|
|
304
|
+
score: compScore,
|
|
305
|
+
weight: DIMENSION_WEIGHTS.competitive_landscape,
|
|
306
|
+
weightedScore: (compScore * DIMENSION_WEIGHTS.competitive_landscape) / 100,
|
|
307
|
+
rationale: `${params.known_competitors} known competitors, ${params.competitor_incumbent ? "incumbent present" : "no incumbent"}`,
|
|
308
|
+
risks: compRisks,
|
|
309
|
+
mitigations: compRisks.map(r => r.includes("incumbent") ? "Develop compelling ghost strategy against incumbent weaknesses" : "Focus on unique differentiators and win themes"),
|
|
310
|
+
});
|
|
311
|
+
// 8. Risk Profile
|
|
312
|
+
const rp = scoreRiskProfile(params.contract_type, params.contract_duration_months, params.protest_likely, params.regulatory_complexity, params.subcontracting_required, params.security_clearance_needed);
|
|
313
|
+
dimensions.push({
|
|
314
|
+
dimension: "Risk Profile",
|
|
315
|
+
score: rp.score,
|
|
316
|
+
weight: DIMENSION_WEIGHTS.risk_profile,
|
|
317
|
+
weightedScore: (rp.score * DIMENSION_WEIGHTS.risk_profile) / 100,
|
|
318
|
+
rationale: rp.rationale,
|
|
319
|
+
risks: rp.risks,
|
|
320
|
+
mitigations: rp.risks.map(() => "Develop detailed risk mitigation plan, allocate management reserve"),
|
|
321
|
+
});
|
|
322
|
+
// Calculate overall
|
|
323
|
+
const overallScore = Math.round(dimensions.reduce((a, d) => a + d.weightedScore, 0));
|
|
324
|
+
// Must-haves check
|
|
325
|
+
const mustHaves = {
|
|
326
|
+
met: (params.must_haves ?? []).filter(m => m.met).map(m => m.requirement),
|
|
327
|
+
unmet: (params.must_haves ?? []).filter(m => !m.met).map(m => m.requirement),
|
|
328
|
+
};
|
|
329
|
+
// Decision
|
|
330
|
+
let recommendation;
|
|
331
|
+
let confidence;
|
|
332
|
+
if (mustHaves.unmet.length > 0) {
|
|
333
|
+
recommendation = "NO_BID";
|
|
334
|
+
confidence = "high";
|
|
335
|
+
}
|
|
336
|
+
else if (overallScore >= 70) {
|
|
337
|
+
recommendation = "BID";
|
|
338
|
+
confidence = overallScore >= 80 ? "high" : "medium";
|
|
339
|
+
}
|
|
340
|
+
else if (overallScore >= 50) {
|
|
341
|
+
recommendation = "CONDITIONAL_BID";
|
|
342
|
+
confidence = "medium";
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
recommendation = "NO_BID";
|
|
346
|
+
confidence = overallScore < 35 ? "high" : "medium";
|
|
347
|
+
}
|
|
348
|
+
// Collect top risks and strengths
|
|
349
|
+
const allRisks = dimensions.flatMap(d => d.risks);
|
|
350
|
+
const topStrengths = dimensions.filter(d => d.score >= 70).sort((a, b) => b.score - a.score).map(d => `${d.dimension}: ${d.score}/100`);
|
|
351
|
+
// Build output
|
|
352
|
+
let output = `# Bid/No-Bid Evaluation: ${params.opportunity_name}\n\n`;
|
|
353
|
+
output += `**Customer:** ${params.customer}\n`;
|
|
354
|
+
output += `**Contract Value:** $${params.contract_value.toLocaleString()}\n`;
|
|
355
|
+
output += `**Contract Type:** ${params.contract_type.replace(/_/g, " ")}\n`;
|
|
356
|
+
output += `**Duration:** ${params.contract_duration_months} months\n\n`;
|
|
357
|
+
// Decision box
|
|
358
|
+
output += `## RECOMMENDATION: ${recommendation.replace(/_/g, " ")}\n`;
|
|
359
|
+
output += `**Overall Score:** ${overallScore}/100 | **Confidence:** ${confidence}\n\n`;
|
|
360
|
+
if (recommendation === "CONDITIONAL_BID") {
|
|
361
|
+
output += `> Conditions for proceeding:\n`;
|
|
362
|
+
for (const d of dimensions.filter(d => d.score < 50)) {
|
|
363
|
+
output += `> - Address ${d.dimension} weakness (currently ${d.score}/100)\n`;
|
|
364
|
+
}
|
|
365
|
+
output += `\n`;
|
|
366
|
+
}
|
|
367
|
+
// Dimension scores
|
|
368
|
+
output += `## Scoring Breakdown\n\n`;
|
|
369
|
+
output += `| Dimension | Score | Weight | Weighted | Assessment |\n`;
|
|
370
|
+
output += `|-----------|-------|--------|----------|------------|\n`;
|
|
371
|
+
for (const d of dimensions.sort((a, b) => b.weightedScore - a.weightedScore)) {
|
|
372
|
+
const assessment = d.score >= 80 ? "Strong" : d.score >= 60 ? "Adequate" : d.score >= 40 ? "Weak" : "Critical";
|
|
373
|
+
output += `| ${d.dimension} | ${d.score}/100 | ${d.weight}% | ${d.weightedScore.toFixed(1)} | ${assessment} |\n`;
|
|
374
|
+
}
|
|
375
|
+
output += `| **TOTAL** | **${overallScore}/100** | **100%** | **${overallScore}** | |\n`;
|
|
376
|
+
// Strengths & Risks
|
|
377
|
+
if (topStrengths.length > 0) {
|
|
378
|
+
output += `\n## Strengths\n`;
|
|
379
|
+
for (const s of topStrengths)
|
|
380
|
+
output += `- ${s}\n`;
|
|
381
|
+
}
|
|
382
|
+
if (allRisks.length > 0) {
|
|
383
|
+
output += `\n## Risk Factors\n`;
|
|
384
|
+
for (const r of allRisks)
|
|
385
|
+
output += `- ${r}\n`;
|
|
386
|
+
}
|
|
387
|
+
// Must-haves
|
|
388
|
+
if (mustHaves.met.length > 0 || mustHaves.unmet.length > 0) {
|
|
389
|
+
output += `\n## Must-Have Requirements\n`;
|
|
390
|
+
for (const m of mustHaves.met)
|
|
391
|
+
output += `- [x] ${m}\n`;
|
|
392
|
+
for (const m of mustHaves.unmet)
|
|
393
|
+
output += `- [ ] **UNMET:** ${m}\n`;
|
|
394
|
+
}
|
|
395
|
+
// Detailed dimension analysis
|
|
396
|
+
output += `\n## Detailed Analysis\n`;
|
|
397
|
+
for (const d of dimensions) {
|
|
398
|
+
output += `\n### ${d.dimension} (${d.score}/100)\n`;
|
|
399
|
+
output += `${d.rationale}\n`;
|
|
400
|
+
if (d.risks.length > 0) {
|
|
401
|
+
output += `\n**Risks:**\n`;
|
|
402
|
+
for (let i = 0; i < d.risks.length; i++) {
|
|
403
|
+
output += `- ${d.risks[i]}\n`;
|
|
404
|
+
if (d.mitigations[i])
|
|
405
|
+
output += ` - *Mitigation:* ${d.mitigations[i]}\n`;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
|
|
410
|
+
return { content: [{ type: "text", text: output }] };
|
|
411
|
+
});
|
|
412
|
+
// ── Tool: Compare Opportunities ───────────────────────────────────────
|
|
413
|
+
server.tool("compare_opportunities", "Rank multiple bid opportunities by win probability and strategic value to prioritize your pipeline", {
|
|
414
|
+
opportunities: z.array(z.object({
|
|
415
|
+
name: z.string(),
|
|
416
|
+
contract_value: z.number().positive(),
|
|
417
|
+
win_probability: z.number().min(0).max(100).describe("Estimated win probability (0-100)"),
|
|
418
|
+
strategic_value: z.number().min(1).max(10).describe("Strategic value (1-10)"),
|
|
419
|
+
bid_cost: z.number().positive().describe("Estimated cost to bid"),
|
|
420
|
+
margin_pct: z.number().min(0).describe("Expected margin percentage"),
|
|
421
|
+
deadline_days: z.number().min(0).describe("Days until proposal deadline"),
|
|
422
|
+
resource_conflict: z.boolean().describe("Does this conflict with other pursuits?"),
|
|
423
|
+
})).min(2).max(20).describe("Opportunities to compare"),
|
|
424
|
+
max_concurrent_bids: z.number().min(1).max(20).default(5).describe("Maximum concurrent bids your team can handle"),
|
|
425
|
+
annual_bid_budget: z.number().positive().optional().describe("Annual budget for bid/proposal activities"),
|
|
426
|
+
}, async ({ opportunities, max_concurrent_bids, annual_bid_budget }) => {
|
|
427
|
+
// Calculate expected value and ROI for each
|
|
428
|
+
const scored = opportunities.map(o => {
|
|
429
|
+
const expectedValue = (o.contract_value * o.margin_pct / 100) * (o.win_probability / 100);
|
|
430
|
+
const bidROI = o.bid_cost > 0 ? expectedValue / o.bid_cost : 0;
|
|
431
|
+
const urgency = o.deadline_days <= 7 ? "URGENT" : o.deadline_days <= 14 ? "Soon" : o.deadline_days <= 30 ? "Normal" : "Flexible";
|
|
432
|
+
// Composite score: weighted combination
|
|
433
|
+
const compositeScore = (o.win_probability * 0.35) + (o.strategic_value * 8 * 0.25) + (Math.min(bidROI * 10, 100) * 0.25) + ((1 - (o.resource_conflict ? 0.5 : 0)) * 100 * 0.15);
|
|
434
|
+
return { ...o, expectedValue, bidROI, urgency, compositeScore: Math.round(compositeScore) };
|
|
435
|
+
});
|
|
436
|
+
// Sort by composite score
|
|
437
|
+
scored.sort((a, b) => b.compositeScore - a.compositeScore);
|
|
438
|
+
let output = `# Pipeline Opportunity Ranking\n\n`;
|
|
439
|
+
output += `**Opportunities Evaluated:** ${scored.length}\n`;
|
|
440
|
+
output += `**Max Concurrent Bids:** ${max_concurrent_bids}\n`;
|
|
441
|
+
if (annual_bid_budget)
|
|
442
|
+
output += `**Annual Bid Budget:** $${annual_bid_budget.toLocaleString()}\n`;
|
|
443
|
+
// Summary table
|
|
444
|
+
output += `\n## Ranked Opportunities\n\n`;
|
|
445
|
+
output += `| Rank | Opportunity | Value | Win% | EV | Bid Cost | ROI | Strategic | Score | Action |\n`;
|
|
446
|
+
output += `|------|-------------|-------|------|-----|----------|-----|-----------|-------|--------|\n`;
|
|
447
|
+
let totalBidCost = 0;
|
|
448
|
+
for (let i = 0; i < scored.length; i++) {
|
|
449
|
+
const o = scored[i];
|
|
450
|
+
totalBidCost += o.bid_cost;
|
|
451
|
+
const withinCapacity = i < max_concurrent_bids;
|
|
452
|
+
const withinBudget = !annual_bid_budget || totalBidCost <= annual_bid_budget;
|
|
453
|
+
const action = (withinCapacity && withinBudget && !o.resource_conflict) ? "PURSUE" : o.resource_conflict ? "CONFLICT" : !withinCapacity ? "DEFER" : "OVER BUDGET";
|
|
454
|
+
output += `| ${i + 1} | ${o.name} | $${(o.contract_value / 1000).toFixed(0)}K | ${o.win_probability}% | $${(o.expectedValue / 1000).toFixed(0)}K | $${(o.bid_cost / 1000).toFixed(0)}K | ${o.bidROI.toFixed(1)}x | ${o.strategic_value}/10 | ${o.compositeScore} | ${action} |\n`;
|
|
455
|
+
}
|
|
456
|
+
// Portfolio analysis
|
|
457
|
+
const pursued = scored.slice(0, max_concurrent_bids).filter(o => !o.resource_conflict);
|
|
458
|
+
const totalPipelineValue = scored.reduce((a, o) => a + o.contract_value, 0);
|
|
459
|
+
const totalExpectedValue = pursued.reduce((a, o) => a + o.expectedValue, 0);
|
|
460
|
+
const totalBidInvestment = pursued.reduce((a, o) => a + o.bid_cost, 0);
|
|
461
|
+
output += `\n## Portfolio Summary\n\n`;
|
|
462
|
+
output += `| Metric | Value |\n`;
|
|
463
|
+
output += `|--------|-------|\n`;
|
|
464
|
+
output += `| Total Pipeline | $${(totalPipelineValue / 1000).toFixed(0)}K |\n`;
|
|
465
|
+
output += `| Pursued (${pursued.length} bids) | $${(pursued.reduce((a, o) => a + o.contract_value, 0) / 1000).toFixed(0)}K |\n`;
|
|
466
|
+
output += `| Total Expected Value | $${(totalExpectedValue / 1000).toFixed(0)}K |\n`;
|
|
467
|
+
output += `| Total Bid Investment | $${(totalBidInvestment / 1000).toFixed(0)}K |\n`;
|
|
468
|
+
output += `| Portfolio ROI | ${totalBidInvestment > 0 ? (totalExpectedValue / totalBidInvestment).toFixed(1) : 0}x |\n`;
|
|
469
|
+
output += `| Avg Win Probability | ${(pursued.reduce((a, o) => a + o.win_probability, 0) / Math.max(pursued.length, 1)).toFixed(0)}% |\n`;
|
|
470
|
+
// Urgency calendar
|
|
471
|
+
const urgent = scored.filter(o => o.deadline_days <= 14);
|
|
472
|
+
if (urgent.length > 0) {
|
|
473
|
+
output += `\n## Urgent Deadlines\n`;
|
|
474
|
+
for (const o of urgent.sort((a, b) => a.deadline_days - b.deadline_days)) {
|
|
475
|
+
output += `- **${o.name}** — ${o.deadline_days} days (${o.urgency})\n`;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
// Resource conflicts
|
|
479
|
+
const conflicts = scored.filter(o => o.resource_conflict);
|
|
480
|
+
if (conflicts.length > 0) {
|
|
481
|
+
output += `\n## Resource Conflicts\n`;
|
|
482
|
+
for (const o of conflicts) {
|
|
483
|
+
output += `- ${o.name} — resolve conflict before pursuing (EV: $${(o.expectedValue / 1000).toFixed(0)}K at risk)\n`;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
|
|
487
|
+
return { content: [{ type: "text", text: output }] };
|
|
488
|
+
});
|
|
489
|
+
// ── Tool: Competitive Position ────────────────────────────────────────
|
|
490
|
+
server.tool("analyze_competitive_position", "Assess your competitive advantages and weaknesses against known competitors for a specific opportunity", {
|
|
491
|
+
opportunity_name: z.string(),
|
|
492
|
+
evaluation_criteria: z.array(z.object({
|
|
493
|
+
criterion: z.string().describe("Evaluation criterion name"),
|
|
494
|
+
weight: z.number().min(1).max(100).describe("Weight in evaluation (must sum to 100)"),
|
|
495
|
+
})).min(3).describe("Evaluation criteria with weights"),
|
|
496
|
+
your_scores: z.record(z.string(), z.number().min(0).max(100)).describe("Your scores per criterion (0-100)"),
|
|
497
|
+
competitors: z.array(z.object({
|
|
498
|
+
name: z.string(),
|
|
499
|
+
scores: z.record(z.string(), z.number().min(0).max(100)).describe("Competitor scores per criterion"),
|
|
500
|
+
known_strengths: z.array(z.string()).optional(),
|
|
501
|
+
known_weaknesses: z.array(z.string()).optional(),
|
|
502
|
+
})).min(1).max(10).describe("Competitors with scores"),
|
|
503
|
+
}, async ({ opportunity_name, evaluation_criteria, your_scores, competitors }) => {
|
|
504
|
+
const criteria = evaluation_criteria.map(c => c.criterion);
|
|
505
|
+
// Calculate weighted scores
|
|
506
|
+
const yourWeighted = criteria.reduce((sum, c) => {
|
|
507
|
+
const weight = evaluation_criteria.find(e => e.criterion === c)?.weight ?? 0;
|
|
508
|
+
return sum + ((your_scores[c] ?? 0) * weight) / 100;
|
|
509
|
+
}, 0);
|
|
510
|
+
const compResults = competitors.map(comp => {
|
|
511
|
+
const weighted = criteria.reduce((sum, c) => {
|
|
512
|
+
const weight = evaluation_criteria.find(e => e.criterion === c)?.weight ?? 0;
|
|
513
|
+
return sum + ((comp.scores[c] ?? 0) * weight) / 100;
|
|
514
|
+
}, 0);
|
|
515
|
+
return { ...comp, weightedScore: Math.round(weighted) };
|
|
516
|
+
});
|
|
517
|
+
// Sort all by score
|
|
518
|
+
const allEntities = [
|
|
519
|
+
{ name: "YOUR BID", weightedScore: Math.round(yourWeighted), isYou: true },
|
|
520
|
+
...compResults.map(c => ({ name: c.name, weightedScore: c.weightedScore, isYou: false })),
|
|
521
|
+
].sort((a, b) => b.weightedScore - a.weightedScore);
|
|
522
|
+
const yourRank = allEntities.findIndex(e => e.isYou) + 1;
|
|
523
|
+
let output = `# Competitive Position Analysis: ${opportunity_name}\n\n`;
|
|
524
|
+
output += `**Your Position:** Rank ${yourRank} of ${allEntities.length} | Score: ${Math.round(yourWeighted)}/100\n\n`;
|
|
525
|
+
// Ranking table
|
|
526
|
+
output += `## Overall Ranking\n\n`;
|
|
527
|
+
output += `| Rank | Bidder | Weighted Score | Gap |\n`;
|
|
528
|
+
output += `|------|--------|---------------|-----|\n`;
|
|
529
|
+
for (let i = 0; i < allEntities.length; i++) {
|
|
530
|
+
const e = allEntities[i];
|
|
531
|
+
const gap = e.weightedScore - Math.round(yourWeighted);
|
|
532
|
+
output += `| ${i + 1} | ${e.isYou ? "**" + e.name + "**" : e.name} | ${e.weightedScore}/100 | ${gap > 0 ? "+" : ""}${gap} |\n`;
|
|
533
|
+
}
|
|
534
|
+
// Criterion-by-criterion breakdown
|
|
535
|
+
output += `\n## Criterion Breakdown\n\n`;
|
|
536
|
+
output += `| Criterion | Weight | Your Score | ${competitors.map(c => c.name).join(" | ")} | Your Rank |\n`;
|
|
537
|
+
output += `|-----------|--------|------------|${competitors.map(() => "--------").join("|")}|-----------|\n`;
|
|
538
|
+
for (const c of criteria) {
|
|
539
|
+
const weight = evaluation_criteria.find(e => e.criterion === c)?.weight ?? 0;
|
|
540
|
+
const yours = your_scores[c] ?? 0;
|
|
541
|
+
const compScores = competitors.map(comp => comp.scores[c] ?? 0);
|
|
542
|
+
const allScores = [yours, ...compScores].sort((a, b) => b - a);
|
|
543
|
+
const rank = allScores.indexOf(yours) + 1;
|
|
544
|
+
output += `| ${c} | ${weight}% | ${yours} | ${compScores.join(" | ")} | ${rank} |\n`;
|
|
545
|
+
}
|
|
546
|
+
// Strengths and vulnerabilities
|
|
547
|
+
output += `\n## Your Competitive Advantages\n`;
|
|
548
|
+
for (const c of criteria) {
|
|
549
|
+
const yours = your_scores[c] ?? 0;
|
|
550
|
+
const bestComp = Math.max(...competitors.map(comp => comp.scores[c] ?? 0));
|
|
551
|
+
if (yours > bestComp) {
|
|
552
|
+
output += `- **${c}** — you lead by ${yours - bestComp} points. Emphasize this in your proposal.\n`;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
output += `\n## Vulnerabilities\n`;
|
|
556
|
+
for (const c of criteria) {
|
|
557
|
+
const yours = your_scores[c] ?? 0;
|
|
558
|
+
const bestComp = Math.max(...competitors.map(comp => comp.scores[c] ?? 0));
|
|
559
|
+
if (yours < bestComp) {
|
|
560
|
+
const leader = competitors.find(comp => (comp.scores[c] ?? 0) === bestComp)?.name ?? "Unknown";
|
|
561
|
+
output += `- **${c}** — ${leader} leads by ${bestComp - yours} points. Develop ghost strategy or mitigation.\n`;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
// Ghost strategies per competitor
|
|
565
|
+
output += `\n## Ghost Strategies\n`;
|
|
566
|
+
for (const comp of compResults) {
|
|
567
|
+
output += `\n### vs ${comp.name} (Score: ${comp.weightedScore})\n`;
|
|
568
|
+
if (comp.known_weaknesses && comp.known_weaknesses.length > 0) {
|
|
569
|
+
output += `**Known weaknesses to exploit:**\n`;
|
|
570
|
+
for (const w of comp.known_weaknesses)
|
|
571
|
+
output += `- ${w}\n`;
|
|
572
|
+
}
|
|
573
|
+
// Find criteria where you beat them
|
|
574
|
+
const yourAdvantages = criteria.filter(c => (your_scores[c] ?? 0) > (comp.scores[c] ?? 0));
|
|
575
|
+
if (yourAdvantages.length > 0) {
|
|
576
|
+
output += `**Your advantages:** ${yourAdvantages.join(", ")}\n`;
|
|
577
|
+
}
|
|
578
|
+
// Find criteria where they beat you
|
|
579
|
+
const theirAdvantages = criteria.filter(c => (comp.scores[c] ?? 0) > (your_scores[c] ?? 0));
|
|
580
|
+
if (theirAdvantages.length > 0) {
|
|
581
|
+
output += `**Their advantages:** ${theirAdvantages.join(", ")}\n`;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
|
|
585
|
+
return { content: [{ type: "text", text: output }] };
|
|
586
|
+
});
|
|
587
|
+
// ── Tool: Estimate Bid Cost ───────────────────────────────────────────
|
|
588
|
+
server.tool("estimate_bid_cost", "Calculate the cost of pursuing an opportunity — labor, materials, travel, subcontractors, and opportunity cost", {
|
|
589
|
+
opportunity_name: z.string(),
|
|
590
|
+
proposal_complexity: z.enum(["simple", "moderate", "complex", "very_complex"]).describe("Overall proposal complexity"),
|
|
591
|
+
page_limit: z.number().min(1).optional().describe("Proposal page limit"),
|
|
592
|
+
volumes_required: z.array(z.string()).default(["technical", "management", "past_performance", "cost"]).describe("Proposal volumes required"),
|
|
593
|
+
proposal_team_size: z.number().min(1).describe("Number of people on the proposal team"),
|
|
594
|
+
avg_hourly_rate: z.number().positive().describe("Average loaded hourly rate for proposal team"),
|
|
595
|
+
estimated_weeks: z.number().min(1).describe("Weeks to complete the proposal"),
|
|
596
|
+
travel_trips: z.number().min(0).default(0).describe("Number of customer visits/site surveys"),
|
|
597
|
+
travel_cost_per_trip: z.number().min(0).default(2000).describe("Average cost per trip"),
|
|
598
|
+
subcontractor_coordination: z.number().min(0).default(0).describe("Number of subcontractors to coordinate"),
|
|
599
|
+
graphic_design_hours: z.number().min(0).default(0).describe("Hours of graphic design support"),
|
|
600
|
+
graphic_hourly_rate: z.number().min(0).default(95).describe("Graphic designer hourly rate"),
|
|
601
|
+
review_cycles: z.number().min(1).default(3).describe("Number of formal review cycles (pink/red/gold)"),
|
|
602
|
+
contract_value: z.number().positive().describe("Expected contract value for ROI calculation"),
|
|
603
|
+
win_probability: z.number().min(0).max(100).describe("Estimated win probability"),
|
|
604
|
+
}, async (params) => {
|
|
605
|
+
// Complexity multiplier
|
|
606
|
+
const complexityMult = { simple: 0.7, moderate: 1.0, complex: 1.4, very_complex: 1.8 }[params.proposal_complexity];
|
|
607
|
+
// Labor cost
|
|
608
|
+
const weeklyHours = 40;
|
|
609
|
+
const proposalHours = params.proposal_team_size * weeklyHours * params.estimated_weeks * complexityMult;
|
|
610
|
+
const laborCost = proposalHours * params.avg_hourly_rate;
|
|
611
|
+
// Review overhead (each review cycle adds ~15% overhead)
|
|
612
|
+
const reviewOverhead = laborCost * (params.review_cycles * 0.15);
|
|
613
|
+
// Graphics
|
|
614
|
+
const graphicsCost = params.graphic_design_hours * params.graphic_hourly_rate;
|
|
615
|
+
// Travel
|
|
616
|
+
const travelCost = params.travel_trips * params.travel_cost_per_trip;
|
|
617
|
+
// Subcontractor coordination (~20 hours per sub)
|
|
618
|
+
const subCost = params.subcontractor_coordination * 20 * params.avg_hourly_rate;
|
|
619
|
+
// Materials & printing
|
|
620
|
+
const materialsCost = (params.page_limit ?? 100) * params.volumes_required.length * 2; // ~$2 per page per volume for printing
|
|
621
|
+
// Total
|
|
622
|
+
const totalCost = laborCost + reviewOverhead + graphicsCost + travelCost + subCost + materialsCost;
|
|
623
|
+
// ROI analysis
|
|
624
|
+
const expectedProfit = (params.contract_value * 0.10) * (params.win_probability / 100); // assume 10% profit margin
|
|
625
|
+
const bidROI = totalCost > 0 ? expectedProfit / totalCost : 0;
|
|
626
|
+
let output = `# Bid Cost Estimate: ${params.opportunity_name}\n\n`;
|
|
627
|
+
output += `**Proposal Complexity:** ${params.proposal_complexity}\n`;
|
|
628
|
+
output += `**Team Size:** ${params.proposal_team_size} | **Duration:** ${params.estimated_weeks} weeks\n`;
|
|
629
|
+
output += `**Volumes:** ${params.volumes_required.join(", ")}\n\n`;
|
|
630
|
+
output += `## Cost Breakdown\n\n`;
|
|
631
|
+
output += `| Category | Hours | Rate | Cost |\n`;
|
|
632
|
+
output += `|----------|-------|------|------|\n`;
|
|
633
|
+
output += `| Proposal Labor | ${Math.round(proposalHours)} | $${params.avg_hourly_rate}/hr | $${Math.round(laborCost).toLocaleString()} |\n`;
|
|
634
|
+
output += `| Review Cycles (${params.review_cycles}) | — | — | $${Math.round(reviewOverhead).toLocaleString()} |\n`;
|
|
635
|
+
output += `| Graphic Design | ${params.graphic_design_hours} | $${params.graphic_hourly_rate}/hr | $${Math.round(graphicsCost).toLocaleString()} |\n`;
|
|
636
|
+
output += `| Travel (${params.travel_trips} trips) | — | $${params.travel_cost_per_trip}/trip | $${Math.round(travelCost).toLocaleString()} |\n`;
|
|
637
|
+
output += `| Subcontractor Coordination (${params.subcontractor_coordination}) | ${params.subcontractor_coordination * 20} | $${params.avg_hourly_rate}/hr | $${Math.round(subCost).toLocaleString()} |\n`;
|
|
638
|
+
output += `| Materials & Printing | — | — | $${Math.round(materialsCost).toLocaleString()} |\n`;
|
|
639
|
+
output += `| **TOTAL** | | | **$${Math.round(totalCost).toLocaleString()}** |\n`;
|
|
640
|
+
output += `\n## ROI Analysis\n\n`;
|
|
641
|
+
output += `| Metric | Value |\n`;
|
|
642
|
+
output += `|--------|-------|\n`;
|
|
643
|
+
output += `| Contract Value | $${params.contract_value.toLocaleString()} |\n`;
|
|
644
|
+
output += `| Win Probability | ${params.win_probability}% |\n`;
|
|
645
|
+
output += `| Expected Profit (10% margin) | $${Math.round(expectedProfit).toLocaleString()} |\n`;
|
|
646
|
+
output += `| Bid Investment | $${Math.round(totalCost).toLocaleString()} |\n`;
|
|
647
|
+
output += `| Bid ROI | ${bidROI.toFixed(1)}x |\n`;
|
|
648
|
+
output += `| Bid-to-Win Ratio | ${params.win_probability > 0 ? `1:${(100 / params.win_probability).toFixed(1)}` : "N/A"} |\n`;
|
|
649
|
+
output += `| Break-even Win Rate | ${(totalCost / (params.contract_value * 0.10) * 100).toFixed(1)}% |\n`;
|
|
650
|
+
// Verdict
|
|
651
|
+
output += `\n## Investment Verdict\n\n`;
|
|
652
|
+
if (bidROI >= 3) {
|
|
653
|
+
output += `**Strong investment.** Expected return is ${bidROI.toFixed(1)}x the bid cost. Proceed.\n`;
|
|
654
|
+
}
|
|
655
|
+
else if (bidROI >= 1.5) {
|
|
656
|
+
output += `**Acceptable investment.** ${bidROI.toFixed(1)}x return justifies the pursuit if strategic value is present.\n`;
|
|
657
|
+
}
|
|
658
|
+
else if (bidROI >= 1) {
|
|
659
|
+
output += `**Marginal investment.** ${bidROI.toFixed(1)}x return barely covers bid costs. Only pursue for strategic reasons.\n`;
|
|
660
|
+
}
|
|
661
|
+
else {
|
|
662
|
+
output += `**Poor investment.** ${bidROI.toFixed(1)}x return — bid costs exceed expected returns. Reconsider pursuing.\n`;
|
|
663
|
+
}
|
|
664
|
+
output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
|
|
665
|
+
return { content: [{ type: "text", text: output }] };
|
|
666
|
+
});
|
|
667
|
+
// ── Tool: Generate Pursuit Plan ───────────────────────────────────────
|
|
668
|
+
server.tool("generate_pursuit_plan", "Create a structured pursuit plan with milestones, team assignments, win themes, and discriminators", {
|
|
669
|
+
opportunity_name: z.string(),
|
|
670
|
+
customer: z.string(),
|
|
671
|
+
contract_value: z.number().positive(),
|
|
672
|
+
proposal_due_date: z.string().describe("Proposal submission deadline (YYYY-MM-DD)"),
|
|
673
|
+
win_themes: z.array(z.string()).min(1).max(5).describe("Core win themes (e.g., 'Proven delivery at scale', 'Cost efficiency through automation')"),
|
|
674
|
+
discriminators: z.array(z.string()).min(1).max(5).describe("Key discriminators that differentiate you from competitors"),
|
|
675
|
+
team_members: z.array(z.object({
|
|
676
|
+
name: z.string(),
|
|
677
|
+
role: z.string().describe("Role (e.g., 'Capture Manager', 'Technical Lead', 'Volume Lead')"),
|
|
678
|
+
availability_pct: z.number().min(0).max(100).describe("Availability percentage"),
|
|
679
|
+
})).min(1).describe("Pursuit team members"),
|
|
680
|
+
key_risks: z.array(z.string()).optional().describe("Key risks to address"),
|
|
681
|
+
customer_hot_buttons: z.array(z.string()).optional().describe("Customer's known priorities/hot buttons"),
|
|
682
|
+
competitor_names: z.array(z.string()).optional().describe("Known competitors"),
|
|
683
|
+
}, async (params) => {
|
|
684
|
+
const dueDate = new Date(params.proposal_due_date);
|
|
685
|
+
const today = new Date();
|
|
686
|
+
const daysUntilDue = Math.ceil((dueDate.getTime() - today.getTime()) / 86400000);
|
|
687
|
+
let output = `# Pursuit Plan: ${params.opportunity_name}\n\n`;
|
|
688
|
+
output += `**Customer:** ${params.customer}\n`;
|
|
689
|
+
output += `**Contract Value:** $${params.contract_value.toLocaleString()}\n`;
|
|
690
|
+
output += `**Proposal Due:** ${params.proposal_due_date} (${daysUntilDue} days)\n\n`;
|
|
691
|
+
// Win Strategy
|
|
692
|
+
output += `## Win Strategy\n\n`;
|
|
693
|
+
output += `### Win Themes\n`;
|
|
694
|
+
for (let i = 0; i < params.win_themes.length; i++) {
|
|
695
|
+
output += `${i + 1}. **${params.win_themes[i]}**\n`;
|
|
696
|
+
}
|
|
697
|
+
output += `\n### Discriminators\n`;
|
|
698
|
+
for (const d of params.discriminators) {
|
|
699
|
+
output += `- ${d}\n`;
|
|
700
|
+
}
|
|
701
|
+
if (params.customer_hot_buttons && params.customer_hot_buttons.length > 0) {
|
|
702
|
+
output += `\n### Customer Hot Buttons\n`;
|
|
703
|
+
for (const h of params.customer_hot_buttons) {
|
|
704
|
+
output += `- ${h}\n`;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
// Ghost strategy
|
|
708
|
+
if (params.competitor_names && params.competitor_names.length > 0) {
|
|
709
|
+
output += `\n### Competitive Ghost Strategy\n`;
|
|
710
|
+
for (const c of params.competitor_names) {
|
|
711
|
+
output += `- **vs ${c}:** Emphasize differentiators without naming. Highlight areas where they typically underperform.\n`;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
// Team assignments
|
|
715
|
+
output += `\n## Pursuit Team\n\n`;
|
|
716
|
+
output += `| Name | Role | Availability |\n`;
|
|
717
|
+
output += `|------|------|--------------|\n`;
|
|
718
|
+
for (const m of params.team_members) {
|
|
719
|
+
output += `| ${m.name} | ${m.role} | ${m.availability_pct}% |\n`;
|
|
720
|
+
}
|
|
721
|
+
// Low availability warning
|
|
722
|
+
const lowAvail = params.team_members.filter(m => m.availability_pct < 50);
|
|
723
|
+
if (lowAvail.length > 0) {
|
|
724
|
+
output += `\n> **Warning:** ${lowAvail.map(m => m.name).join(", ")} ha${lowAvail.length === 1 ? "s" : "ve"} <50% availability. Consider backfills.\n`;
|
|
725
|
+
}
|
|
726
|
+
// Milestone timeline
|
|
727
|
+
output += `\n## Pursuit Milestones\n\n`;
|
|
728
|
+
const milestones = [
|
|
729
|
+
{ name: "Kickoff Meeting", daysBefore: Math.min(daysUntilDue, Math.max(daysUntilDue - 2, 0)), owner: "Capture Manager" },
|
|
730
|
+
{ name: "Solution Architecture Review", daysBefore: Math.max(Math.floor(daysUntilDue * 0.75), 1), owner: "Technical Lead" },
|
|
731
|
+
{ name: "Win Theme Validation", daysBefore: Math.max(Math.floor(daysUntilDue * 0.70), 1), owner: "Capture Manager" },
|
|
732
|
+
{ name: "Pink Team Review (Outline)", daysBefore: Math.max(Math.floor(daysUntilDue * 0.60), 1), owner: "All Volume Leads" },
|
|
733
|
+
{ name: "First Draft Complete", daysBefore: Math.max(Math.floor(daysUntilDue * 0.45), 1), owner: "Volume Leads" },
|
|
734
|
+
{ name: "Red Team Review (Full Draft)", daysBefore: Math.max(Math.floor(daysUntilDue * 0.35), 1), owner: "Review Board" },
|
|
735
|
+
{ name: "Red Team Comment Resolution", daysBefore: Math.max(Math.floor(daysUntilDue * 0.25), 1), owner: "Volume Leads" },
|
|
736
|
+
{ name: "Gold Team Review (Final)", daysBefore: Math.max(Math.floor(daysUntilDue * 0.15), 1), owner: "Executive Sponsor" },
|
|
737
|
+
{ name: "Final Production & QC", daysBefore: Math.max(Math.floor(daysUntilDue * 0.08), 1), owner: "Proposal Manager" },
|
|
738
|
+
{ name: "Submission", daysBefore: 0, owner: "Proposal Manager" },
|
|
739
|
+
];
|
|
740
|
+
output += `| Milestone | Target Date | Days Left | Owner |\n`;
|
|
741
|
+
output += `|-----------|-------------|-----------|-------|\n`;
|
|
742
|
+
for (const m of milestones) {
|
|
743
|
+
const targetDate = new Date(dueDate.getTime() - m.daysBefore * 86400000);
|
|
744
|
+
const daysLeft = Math.ceil((targetDate.getTime() - today.getTime()) / 86400000);
|
|
745
|
+
const status = daysLeft < 0 ? "OVERDUE" : daysLeft === 0 ? "TODAY" : `${daysLeft}d`;
|
|
746
|
+
output += `| ${m.name} | ${targetDate.toISOString().split("T")[0]} | ${status} | ${m.owner} |\n`;
|
|
747
|
+
}
|
|
748
|
+
// Risk register
|
|
749
|
+
if (params.key_risks && params.key_risks.length > 0) {
|
|
750
|
+
output += `\n## Risk Register\n\n`;
|
|
751
|
+
output += `| Risk | Severity | Mitigation |\n`;
|
|
752
|
+
output += `|------|----------|------------|\n`;
|
|
753
|
+
for (const r of params.key_risks) {
|
|
754
|
+
output += `| ${r} | Medium | Develop mitigation plan by Pink Team |\n`;
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
// Checklist
|
|
758
|
+
output += `\n## Pre-Submission Checklist\n\n`;
|
|
759
|
+
output += `- [ ] All RFP requirements cross-referenced and addressed\n`;
|
|
760
|
+
output += `- [ ] Win themes woven into every section\n`;
|
|
761
|
+
output += `- [ ] Compliance matrix completed\n`;
|
|
762
|
+
output += `- [ ] Cost volume reviewed by pricing team\n`;
|
|
763
|
+
output += `- [ ] Past performance references confirmed\n`;
|
|
764
|
+
output += `- [ ] Executive summary reviewed by leadership\n`;
|
|
765
|
+
output += `- [ ] Graphics and visuals finalized\n`;
|
|
766
|
+
output += `- [ ] Page count and formatting verified\n`;
|
|
767
|
+
output += `- [ ] All required certifications/representations signed\n`;
|
|
768
|
+
output += `- [ ] Submission method confirmed and tested\n`;
|
|
769
|
+
output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
|
|
770
|
+
return { content: [{ type: "text", text: output }] };
|
|
771
|
+
});
|
|
772
|
+
// ── Start Server ──────────────────────────────────────────────────────
|
|
773
|
+
async function main() {
|
|
774
|
+
const transport = new StdioServerTransport();
|
|
775
|
+
await server.connect(transport);
|
|
776
|
+
}
|
|
777
|
+
main().catch(console.error);
|
|
778
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bidcraft-evaluate-mcp",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "MCP server for bid/no-bid evaluation — scores RFP opportunities on win probability, strategic fit, resource requirements, competitive positioning, and risk factors to make data-driven pursuit decisions",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"bidcraft-evaluate-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"start": "node dist/index.js",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"mcp",
|
|
21
|
+
"model-context-protocol",
|
|
22
|
+
"bid-no-bid",
|
|
23
|
+
"rfp",
|
|
24
|
+
"proposal",
|
|
25
|
+
"bid-evaluation",
|
|
26
|
+
"win-probability",
|
|
27
|
+
"pursuit-decision",
|
|
28
|
+
"government-contracting",
|
|
29
|
+
"bidcraft",
|
|
30
|
+
"competitive-analysis",
|
|
31
|
+
"capture-management",
|
|
32
|
+
"pipeline-scoring",
|
|
33
|
+
"opportunity-assessment",
|
|
34
|
+
"go-no-go"
|
|
35
|
+
],
|
|
36
|
+
"author": "Crawde",
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
40
|
+
"zod": "^3.24.4"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^25.6.2",
|
|
44
|
+
"typescript": "^5.8.3"
|
|
45
|
+
}
|
|
46
|
+
}
|