@agentblueprint/mcp-server 0.1.0 → 0.2.1

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 CHANGED
@@ -32,16 +32,53 @@ Add to your Claude Code MCP config (`.claude/settings.json` or project settings)
32
32
  2. Click "Create Token"
33
33
  3. Copy the token (shown once)
34
34
 
35
+ ## Download Blueprint as Agent Skills
36
+
37
+ Download a blueprint as a local Agent Skills directory that any coding agent can read from the filesystem. This is the recommended way to work with blueprints — it keeps your agent's context window small while giving it access to all the details on demand.
38
+
39
+ ```bash
40
+ # List available blueprints
41
+ npx @agentblueprint/mcp-server download --token <key> --list
42
+
43
+ # Download a blueprint
44
+ npx @agentblueprint/mcp-server download --token <key> --blueprint <id>
45
+
46
+ # Download to a custom directory
47
+ npx @agentblueprint/mcp-server download --token <key> --blueprint <id> --dir ./my-skills
48
+ ```
49
+
50
+ This creates an Agent Skills directory structure:
51
+
52
+ ```
53
+ .agent-blueprint/<blueprint-slug>/
54
+ ├── SKILL.md # Overview + frontmatter (auto-discovered by agents)
55
+ ├── references/
56
+ │ ├── business-context.md # Use case, pain points, transformation story
57
+ │ ├── agent-specifications.md # Full agent specs with tools, guardrails, metrics
58
+ │ ├── financial-case.md # ROI, cost breakdown, sensitivity, 5-year projection
59
+ │ ├── implementation-roadmap.md # Epics, stories, timeline, roles, dependencies
60
+ │ ├── architecture-decisions.md # Platform, pattern, integration gaps, feasibility
61
+ │ └── guardrails-and-governance.md # Risks, mitigation, per-agent guardrails
62
+ └── scripts/
63
+ └── validate-spec.sh # Structure completeness checker
64
+ ```
65
+
66
+ The [Agent Skills](https://agentskills.io) standard is supported by Claude Code, Codex, Cursor, GitHub Copilot, Windsurf, and 18+ other coding agents. SKILL.md loads automatically at activation (~100 tokens), reference files load on demand.
67
+
35
68
  ## Available Tools
36
69
 
37
70
  | Tool | Description |
38
71
  |------|-------------|
39
72
  | `list_blueprints` | List all blueprints (summaries) |
40
- | `get_blueprint` | Full blueprint data by ID |
41
- | `get_business_case` | Business case for a blueprint |
42
- | `get_implementation_plan` | Implementation plan for a blueprint |
73
+ | `get_blueprint` | Blueprint summary title, agents, phases, pattern |
74
+ | `get_business_case` | Business case summary ROI, pilot economics, recommendation |
75
+ | `get_implementation_plan` | Implementation plan summary epics, timeline, story counts |
43
76
  | `get_use_case` | Use case analysis for a blueprint |
44
77
  | `get_implementation_spec` | Implementation spec metadata |
78
+ | `get_business_profile` | Organization business profile |
79
+ | `download_blueprint` | Download full blueprint as Agent Skills file manifest |
80
+
81
+ The `get_blueprint`, `get_business_case`, and `get_implementation_plan` tools return concise summaries optimized for agent context windows. For full details (agent specs, financial projections, user stories), use `download_blueprint` to get the complete Agent Skills directory.
45
82
 
46
83
  ## Available Resources
47
84
 
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,319 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { renderSkillDirectory, slugify } from '../renderers.js';
3
+ // ─── Test fixtures ──────────────────────────────────────────────────
4
+ const minimalInput = {
5
+ blueprintTitle: 'Test Blueprint',
6
+ blueprintId: 'bp-123',
7
+ blueprintData: {
8
+ title: 'Test Blueprint',
9
+ executiveSummary: 'A test blueprint for unit testing.',
10
+ agenticPattern: 'Supervisor',
11
+ enhancedDigitalTeam: [
12
+ {
13
+ name: 'Test Agent',
14
+ role: 'Handles test tasks',
15
+ agentRole: 'Worker',
16
+ supervisionLevel: 'Supervised',
17
+ instructions: { description: 'Process incoming test requests' },
18
+ responsibilities: ['Handle tests', 'Report results'],
19
+ enhancedTools: [
20
+ { name: 'TestRunner', toolCategory: 'Testing', description: 'Runs tests' },
21
+ ],
22
+ guardrails: [
23
+ { type: 'Safety', condition: 'Must not delete production data' },
24
+ ],
25
+ escalationRules: ['Escalate on failure'],
26
+ successMetrics: [
27
+ { metric: 'Test Pass Rate', target: '99%' },
28
+ ],
29
+ },
30
+ ],
31
+ platformRecommendation: {
32
+ primaryPlatform: { name: 'ServiceNow', summary: 'Enterprise platform' },
33
+ },
34
+ riskAssessment: {
35
+ technicalRisks: ['Integration complexity'],
36
+ businessRisks: ['Adoption risk'],
37
+ mitigationStrategies: ['Phased rollout'],
38
+ },
39
+ phases: [
40
+ { name: 'Pilot Phase', durationWeeks: 4, phaseGoal: 'Validate approach', phaseCost: '$50,000' },
41
+ { name: 'Full Rollout', durationWeeks: 12, phaseGoal: 'Enterprise deployment' },
42
+ ],
43
+ },
44
+ };
45
+ const fullInput = {
46
+ ...minimalInput,
47
+ businessCaseData: {
48
+ executiveSummary: {
49
+ purpose: 'Automate testing processes',
50
+ ask: {
51
+ investmentAmount: '$200,000',
52
+ timeline: '6 months',
53
+ keyOutcomes: ['50% faster testing', 'Reduced errors'],
54
+ },
55
+ valueProposition: 'Significant ROI through automation',
56
+ },
57
+ benefits: {
58
+ quantifiedROI: {
59
+ roi: '285%',
60
+ npv: '$450,000',
61
+ paybackPeriod: '8 months',
62
+ pilotROI: {
63
+ pilotCost: '$50,000',
64
+ pilotBenefit: '$80,000',
65
+ pilotROI: '60%',
66
+ pilotDuration: '3 months',
67
+ },
68
+ sensitivity: {
69
+ conservative: { npv: '$300K', roi: '180%', paybackPeriod: '12 months' },
70
+ realistic: { npv: '$450K', roi: '285%', paybackPeriod: '8 months' },
71
+ optimistic: { npv: '$600K', roi: '380%', paybackPeriod: '5 months' },
72
+ },
73
+ fiveYearProjection: [
74
+ { year: 'Year 1', investment: '$200K', value: '$100K', netCashFlow: '-$100K', cumulative: '-$100K' },
75
+ { year: 'Year 2', investment: '$50K', value: '$250K', netCashFlow: '$200K', cumulative: '$100K' },
76
+ ],
77
+ },
78
+ },
79
+ risks: {
80
+ implementationRisks: [
81
+ { title: 'Data migration', severity: 'High', impact: 'Schedule delay' },
82
+ ],
83
+ mitigationPlan: [
84
+ { riskTitle: 'Data migration', strategy: 'Parallel run', owner: 'PM', timeline: 'Week 4-8' },
85
+ ],
86
+ },
87
+ },
88
+ implementationPlanData: {
89
+ projectOverview: {
90
+ projectName: 'Test Automation Project',
91
+ executiveSummary: 'Deploy AI-powered test automation',
92
+ scope: 'All testing functions',
93
+ assumptions: ['Stable API', 'Team availability'],
94
+ },
95
+ epics: [
96
+ {
97
+ name: 'Infrastructure Setup',
98
+ phase: 'Phase 1',
99
+ priority: 'P0',
100
+ estimatedDuration: '2 weeks',
101
+ businessValue: 'Foundation for all agents',
102
+ stories: [
103
+ { title: 'Setup CI/CD', asA: 'developer', iWant: 'automated pipelines', soThat: 'deploys are reliable' },
104
+ ],
105
+ dependencies: ['Cloud access'],
106
+ },
107
+ ],
108
+ resources: {
109
+ timeline: {
110
+ totalDuration: '6 months',
111
+ phases: [
112
+ { name: 'Phase 1', duration: '2 months', milestones: ['Pilot complete'] },
113
+ ],
114
+ },
115
+ roles: [
116
+ { role: 'Developer', allocation: 'Full-time', duration: '6 months', skillsRequired: ['TypeScript', 'AI'] },
117
+ ],
118
+ },
119
+ dependencies: [
120
+ { type: 'Technical', criticality: 'High', description: 'API access required' },
121
+ ],
122
+ },
123
+ useCaseData: {
124
+ title: 'Test Automation',
125
+ description: 'Automate manual testing processes',
126
+ businessChallenge: 'Manual testing is slow and error-prone',
127
+ currentPainPoints: ['Slow feedback loops', 'Human error'],
128
+ desiredBusinessOutcomes: ['Faster releases', 'Higher quality'],
129
+ transformationStory: {
130
+ situation: 'Manual testing taking 2 weeks per release',
131
+ complication: 'Growing product complexity',
132
+ resolution: 'AI-powered automation reduces to 2 days',
133
+ },
134
+ },
135
+ };
136
+ // ─── Tests ──────────────────────────────────────────────────────────
137
+ describe('slugify', () => {
138
+ it('converts title to URL-safe slug', () => {
139
+ expect(slugify('My Test Blueprint')).toBe('my-test-blueprint');
140
+ });
141
+ it('removes special characters', () => {
142
+ expect(slugify('AI-Powered Testing (v2.0)!')).toBe('ai-powered-testing-v2-0');
143
+ });
144
+ it('truncates at 60 characters', () => {
145
+ const long = 'a'.repeat(100);
146
+ expect(slugify(long).length).toBeLessThanOrEqual(60);
147
+ });
148
+ it('handles empty string', () => {
149
+ expect(slugify('')).toBe('');
150
+ });
151
+ });
152
+ describe('renderSkillDirectory', () => {
153
+ it('returns all expected files', () => {
154
+ const files = renderSkillDirectory(minimalInput);
155
+ const paths = Array.from(files.keys());
156
+ expect(paths).toContain('SKILL.md');
157
+ expect(paths).toContain('references/business-context.md');
158
+ expect(paths).toContain('references/agent-specifications.md');
159
+ expect(paths).toContain('references/financial-case.md');
160
+ expect(paths).toContain('references/implementation-roadmap.md');
161
+ expect(paths).toContain('references/architecture-decisions.md');
162
+ expect(paths).toContain('references/guardrails-and-governance.md');
163
+ expect(paths).toContain('scripts/validate-spec.sh');
164
+ expect(files.size).toBe(8);
165
+ });
166
+ it('SKILL.md starts with YAML frontmatter', () => {
167
+ const files = renderSkillDirectory(minimalInput);
168
+ const skill = files.get('SKILL.md');
169
+ expect(skill.startsWith('---\n')).toBe(true);
170
+ expect(skill).toContain('name: test-blueprint');
171
+ expect(skill).toContain('blueprint-id: "bp-123"');
172
+ expect(skill).toContain('platform: "ServiceNow"');
173
+ expect(skill).toContain('agent-count: "1"');
174
+ expect(skill).toContain('pattern: "Supervisor"');
175
+ });
176
+ it('SKILL.md body contains agent table', () => {
177
+ const files = renderSkillDirectory(minimalInput);
178
+ const skill = files.get('SKILL.md');
179
+ expect(skill).toContain('| # | Agent | Role | Type |');
180
+ expect(skill).toContain('Test Agent');
181
+ });
182
+ it('SKILL.md includes phase information', () => {
183
+ const files = renderSkillDirectory(minimalInput);
184
+ const skill = files.get('SKILL.md');
185
+ expect(skill).toContain('Phase 1: Pilot');
186
+ expect(skill).toContain('4 weeks');
187
+ expect(skill).toContain('Full Rollout');
188
+ });
189
+ it('agent-specifications.md includes tool table', () => {
190
+ const files = renderSkillDirectory(minimalInput);
191
+ const agentSpec = files.get('references/agent-specifications.md');
192
+ expect(agentSpec).toContain('## Test Agent');
193
+ expect(agentSpec).toContain('TestRunner');
194
+ expect(agentSpec).toContain('### Guardrails');
195
+ expect(agentSpec).toContain('Must not delete production data');
196
+ expect(agentSpec).toContain('### Success Metrics');
197
+ expect(agentSpec).toContain('99%');
198
+ });
199
+ it('architecture-decisions.md includes platform info', () => {
200
+ const files = renderSkillDirectory(minimalInput);
201
+ const arch = files.get('references/architecture-decisions.md');
202
+ expect(arch).toContain('## Platform: ServiceNow');
203
+ });
204
+ it('guardrails-and-governance.md includes risks', () => {
205
+ const files = renderSkillDirectory(minimalInput);
206
+ const guardrails = files.get('references/guardrails-and-governance.md');
207
+ expect(guardrails).toContain('Integration complexity');
208
+ expect(guardrails).toContain('Adoption risk');
209
+ expect(guardrails).toContain('Phased rollout');
210
+ });
211
+ it('validate-spec.sh is executable bash script', () => {
212
+ const files = renderSkillDirectory(minimalInput);
213
+ const script = files.get('scripts/validate-spec.sh');
214
+ expect(script).toContain('#!/bin/bash');
215
+ expect(script).toContain('check_file "SKILL.md"');
216
+ });
217
+ });
218
+ describe('renderSkillDirectory with full data', () => {
219
+ it('financial-case.md includes ROI and sensitivity', () => {
220
+ const files = renderSkillDirectory(fullInput);
221
+ const financial = files.get('references/financial-case.md');
222
+ expect(financial).toContain('285%');
223
+ expect(financial).toContain('$450,000');
224
+ expect(financial).toContain('8 months');
225
+ expect(financial).toContain('## Sensitivity Analysis');
226
+ expect(financial).toContain('Conservative');
227
+ expect(financial).toContain('## Five-Year Projection');
228
+ expect(financial).toContain('## Pilot Economics');
229
+ });
230
+ it('implementation-roadmap.md includes epics and stories', () => {
231
+ const files = renderSkillDirectory(fullInput);
232
+ const roadmap = files.get('references/implementation-roadmap.md');
233
+ expect(roadmap).toContain('Test Automation Project');
234
+ expect(roadmap).toContain('### Infrastructure Setup');
235
+ expect(roadmap).toContain('Setup CI/CD');
236
+ expect(roadmap).toContain('## Timeline');
237
+ expect(roadmap).toContain('6 months');
238
+ expect(roadmap).toContain('## Required Roles');
239
+ expect(roadmap).toContain('## Dependencies');
240
+ });
241
+ it('business-context.md includes use case data', () => {
242
+ const files = renderSkillDirectory(fullInput);
243
+ const context = files.get('references/business-context.md');
244
+ expect(context).toContain('## Use Case: Test Automation');
245
+ expect(context).toContain('Manual testing is slow');
246
+ expect(context).toContain('## Transformation Story');
247
+ expect(context).toContain('AI-powered automation');
248
+ });
249
+ it('guardrails includes business case risks', () => {
250
+ const files = renderSkillDirectory(fullInput);
251
+ const guardrails = files.get('references/guardrails-and-governance.md');
252
+ expect(guardrails).toContain('Implementation Risks (Business Case)');
253
+ expect(guardrails).toContain('Data migration');
254
+ expect(guardrails).toContain('## Mitigation Plan');
255
+ expect(guardrails).toContain('Parallel run');
256
+ });
257
+ it('SKILL.md includes financial summary when business case present', () => {
258
+ const files = renderSkillDirectory(fullInput);
259
+ const skill = files.get('SKILL.md');
260
+ expect(skill).toContain('**ROI:** 285%');
261
+ expect(skill).toContain('**NPV:** $450,000');
262
+ });
263
+ });
264
+ describe('renderSkillDirectory with missing data', () => {
265
+ it('handles missing business case gracefully', () => {
266
+ const input = {
267
+ ...minimalInput,
268
+ businessCaseData: undefined,
269
+ };
270
+ const files = renderSkillDirectory(input);
271
+ const financial = files.get('references/financial-case.md');
272
+ expect(financial).toContain('No business case data available');
273
+ });
274
+ it('handles missing implementation plan gracefully', () => {
275
+ const input = {
276
+ ...minimalInput,
277
+ implementationPlanData: undefined,
278
+ };
279
+ const files = renderSkillDirectory(input);
280
+ const roadmap = files.get('references/implementation-roadmap.md');
281
+ expect(roadmap).toContain('No implementation plan data available');
282
+ });
283
+ it('handles missing use case gracefully', () => {
284
+ const input = {
285
+ ...minimalInput,
286
+ useCaseData: undefined,
287
+ };
288
+ const files = renderSkillDirectory(input);
289
+ const context = files.get('references/business-context.md');
290
+ expect(context).toContain('Use case data not available');
291
+ });
292
+ it('handles empty team gracefully', () => {
293
+ const input = {
294
+ ...minimalInput,
295
+ blueprintData: { ...minimalInput.blueprintData, enhancedDigitalTeam: [] },
296
+ };
297
+ const files = renderSkillDirectory(input);
298
+ const skill = files.get('SKILL.md');
299
+ expect(skill).toContain('agent-count: "0"');
300
+ });
301
+ it('handles null fields in blueprint data', () => {
302
+ const input = {
303
+ blueprintTitle: 'Null Test',
304
+ blueprintId: 'bp-null',
305
+ blueprintData: {
306
+ title: null,
307
+ executiveSummary: null,
308
+ enhancedDigitalTeam: null,
309
+ phases: null,
310
+ platformRecommendation: null,
311
+ riskAssessment: null,
312
+ },
313
+ };
314
+ // Should not throw
315
+ const files = renderSkillDirectory(input);
316
+ expect(files.size).toBe(8);
317
+ });
318
+ });
319
+ //# sourceMappingURL=renderers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderers.test.js","sourceRoot":"","sources":["../../src/__tests__/renderers.test.ts"],"names":[],"mappings":"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"}