@schilling.mark.a/software-methodology 1.0.0 → 1.0.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/.github/copilot-instructions.md +159 -0
- package/README.md +172 -6
- package/docs/story-map/backbone.md +141 -0
- package/docs/story-map/releases/r1-walking-skeleton.md +152 -0
- package/docs/story-map/user-tasks/ACT-001-task-001.md +45 -0
- package/docs/story-map/user-tasks/ACT-001-task-002.md +48 -0
- package/docs/story-map/user-tasks/ACT-002-task-001.md +47 -0
- package/docs/story-map/user-tasks/ACT-002-task-002.md +47 -0
- package/docs/story-map/user-tasks/ACT-002-task-003.md +46 -0
- package/docs/story-map/user-tasks/ACT-003-task-001.md +47 -0
- package/docs/story-map/user-tasks/ACT-003-task-002.md +46 -0
- package/docs/story-map/user-tasks/ACT-003-task-003.md +49 -0
- package/docs/story-map/user-tasks/ACT-003-task-004.md +47 -0
- package/docs/story-map/user-tasks/ACT-004-task-001.md +48 -0
- package/docs/story-map/user-tasks/ACT-004-task-002.md +49 -0
- package/docs/story-map/user-tasks/ACT-004-task-003.md +47 -0
- package/docs/story-map/user-tasks/ACT-005-task-001.md +47 -0
- package/docs/story-map/user-tasks/ACT-005-task-002.md +48 -0
- package/docs/story-map/user-tasks/ACT-005-task-003.md +48 -0
- package/docs/story-map/user-tasks/ACT-005-task-004.md +48 -0
- package/docs/story-map/user-tasks/ACT-006-task-001.md +47 -0
- package/docs/story-map/user-tasks/ACT-006-task-002.md +46 -0
- package/docs/story-map/user-tasks/ACT-006-task-003.md +47 -0
- package/docs/story-map/user-tasks/ACT-006-task-004.md +46 -0
- package/docs/story-map/user-tasks/ACT-007-task-001.md +48 -0
- package/docs/story-map/user-tasks/ACT-007-task-002.md +47 -0
- package/docs/story-map/user-tasks/ACT-007-task-003.md +47 -0
- package/docs/story-map/user-tasks/ACT-007-task-004.md +48 -0
- package/docs/story-map/user-tasks/ACT-008-task-001.md +48 -0
- package/docs/story-map/user-tasks/ACT-008-task-002.md +48 -0
- package/docs/story-map/user-tasks/ACT-008-task-003.md +47 -0
- package/docs/story-map/user-tasks/ACT-008-task-004.md +48 -0
- package/docs/story-map/walking-skeleton.md +95 -0
- package/docs/value-proposition-canvas.md +171 -0
- package/features/mcp-server/query-vpc.feature +48 -0
- package/features/mcp-server/read-reference.feature +41 -0
- package/features/mcp-server/read-skill.feature +33 -0
- package/features/mcp-server/search-guidance.feature +42 -0
- package/features/mcp-server/suggest-next-step.feature +61 -0
- package/features/mcp-server/validate-gherkin.feature +54 -0
- package/mcp-server/QUICKSTART.md +172 -0
- package/mcp-server/README.md +171 -0
- package/mcp-server/dist/index.d.ts +12 -0
- package/mcp-server/dist/index.js +296 -0
- package/mcp-server/dist/repository.d.ts +59 -0
- package/mcp-server/dist/repository.js +211 -0
- package/mcp-server/dist/tools/gherkin-validator.d.ts +16 -0
- package/mcp-server/dist/tools/gherkin-validator.js +152 -0
- package/mcp-server/dist/tools/guidance-searcher.d.ts +11 -0
- package/mcp-server/dist/tools/guidance-searcher.js +34 -0
- package/mcp-server/dist/tools/next-step-suggester.d.ts +16 -0
- package/mcp-server/dist/tools/next-step-suggester.js +210 -0
- package/mcp-server/dist/tools/reference-reader.d.ts +17 -0
- package/mcp-server/dist/tools/reference-reader.js +57 -0
- package/mcp-server/dist/tools/skill-reader.d.ts +17 -0
- package/mcp-server/dist/tools/skill-reader.js +38 -0
- package/mcp-server/dist/tools/vpc-querier.d.ts +37 -0
- package/mcp-server/dist/tools/vpc-querier.js +158 -0
- package/mcp-server/package.json +42 -0
- package/mcp-server/src/index.ts +331 -0
- package/mcp-server/src/repository.ts +254 -0
- package/mcp-server/src/tools/gherkin-validator.ts +206 -0
- package/mcp-server/src/tools/guidance-searcher.ts +42 -0
- package/mcp-server/src/tools/next-step-suggester.ts +243 -0
- package/mcp-server/src/tools/reference-reader.ts +71 -0
- package/mcp-server/src/tools/skill-reader.ts +47 -0
- package/mcp-server/src/tools/vpc-querier.ts +201 -0
- package/mcp-server/tsconfig.json +17 -0
- package/package.json +8 -2
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# MCP Server Quick Start
|
|
2
|
+
|
|
3
|
+
This guide helps you set up the Software Methodology MCP server for use with Claude Desktop.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Node.js 14 or higher
|
|
8
|
+
- Claude Desktop app installed
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
You can install the software-methodology MCP server in two ways:
|
|
13
|
+
|
|
14
|
+
### Option 1: Install via npm (Recommended)
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Install the parent package which includes the MCP server
|
|
18
|
+
npm install @schilling.mark.a/software-methodology
|
|
19
|
+
|
|
20
|
+
# Navigate to the MCP server directory
|
|
21
|
+
cd node_modules/@schilling.mark.a/software-methodology/mcp-server
|
|
22
|
+
|
|
23
|
+
# Install dependencies and build
|
|
24
|
+
npm install
|
|
25
|
+
npm run build
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Option 2: Clone from Source
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Clone the repository
|
|
32
|
+
git clone https://github.com/MarkSchilling/software-methodology.git
|
|
33
|
+
cd software-methodology/mcp-server
|
|
34
|
+
|
|
35
|
+
# Install dependencies
|
|
36
|
+
npm install
|
|
37
|
+
|
|
38
|
+
# Build the server
|
|
39
|
+
npm run build
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Configuration
|
|
43
|
+
|
|
44
|
+
## Configuration
|
|
45
|
+
|
|
46
|
+
### 1. Configure Claude Desktop
|
|
47
|
+
|
|
48
|
+
Edit your Claude Desktop configuration file:
|
|
49
|
+
|
|
50
|
+
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
51
|
+
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
52
|
+
**Linux:** `~/.config/Claude/claude_desktop_config.json`
|
|
53
|
+
|
|
54
|
+
Add the MCP server configuration (use the path matching your installation method):
|
|
55
|
+
|
|
56
|
+
**For npm installation:**
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"mcpServers": {
|
|
60
|
+
"software-methodology": {
|
|
61
|
+
"command": "node",
|
|
62
|
+
"args": [
|
|
63
|
+
"/FULL/PATH/TO/node_modules/@schilling.mark.a/software-methodology/mcp-server/dist/index.js"
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**For source installation:**
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"mcpServers": {
|
|
74
|
+
"software-methodology": {
|
|
75
|
+
"command": "node",
|
|
76
|
+
"args": [
|
|
77
|
+
"/FULL/PATH/TO/software-methodology/mcp-server/dist/index.js"
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Important:** Replace `/FULL/PATH/TO/` with the actual absolute path on your system.
|
|
85
|
+
|
|
86
|
+
### 2. Restart Claude Desktop
|
|
87
|
+
|
|
88
|
+
Quit Claude Desktop completely and restart it. The MCP server will start automatically.
|
|
89
|
+
|
|
90
|
+
## Verify Installation
|
|
91
|
+
|
|
92
|
+
In Claude Desktop, try these prompts:
|
|
93
|
+
|
|
94
|
+
1. **"List all available skills"**
|
|
95
|
+
- Should return 11 methodology skills
|
|
96
|
+
|
|
97
|
+
2. **"Show me the SOLID principles"**
|
|
98
|
+
- Should return content from clean-code/references/solid.md
|
|
99
|
+
|
|
100
|
+
3. **"What are the pains for Individual Developer segment?"**
|
|
101
|
+
- Should return pains from the VPC
|
|
102
|
+
|
|
103
|
+
4. **"What should I do next?"**
|
|
104
|
+
- Should analyze project state and suggest next step
|
|
105
|
+
|
|
106
|
+
5. **"Search for test-first guidance"**
|
|
107
|
+
- Should return RED-GREEN-REFACTOR content
|
|
108
|
+
|
|
109
|
+
## Available Tools
|
|
110
|
+
|
|
111
|
+
The MCP server provides these tools to Claude:
|
|
112
|
+
|
|
113
|
+
- `read_skill` - Get SKILL.md content for any skill
|
|
114
|
+
- `list_skills` - List all 11 skills with descriptions
|
|
115
|
+
- `read_reference` - Get specific reference documents
|
|
116
|
+
- `list_references` - List references for a skill
|
|
117
|
+
- `query_vpc_segments` - Get customer segments
|
|
118
|
+
- `query_vpc_customer_jobs` - Get jobs for a segment
|
|
119
|
+
- `query_vpc_pains` - Get pains for a segment
|
|
120
|
+
- `query_vpc_gains` - Get gains for a segment
|
|
121
|
+
- `search_vpc` - Search VPC for terms
|
|
122
|
+
- `search_guidance` - Search methodology for relevant content
|
|
123
|
+
- `suggest_next_step` - Get next methodology step
|
|
124
|
+
- `validate_gherkin` - Validate feature files
|
|
125
|
+
|
|
126
|
+
## Troubleshooting
|
|
127
|
+
|
|
128
|
+
### Server not starting
|
|
129
|
+
|
|
130
|
+
1. Check Claude Desktop logs (Help → View Logs)
|
|
131
|
+
2. Verify the path in config is absolute, not relative
|
|
132
|
+
3. Ensure `npm run build` completed successfully
|
|
133
|
+
4. Test the server manually:
|
|
134
|
+
```bash
|
|
135
|
+
cd mcp-server
|
|
136
|
+
node dist/index.js
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Tools not appearing
|
|
140
|
+
|
|
141
|
+
1. Restart Claude Desktop completely (Quit, not just close window)
|
|
142
|
+
2. Check config JSON syntax is valid (use a JSON validator)
|
|
143
|
+
3. Verify server name matches exactly: `"software-methodology"`
|
|
144
|
+
|
|
145
|
+
### Permission errors
|
|
146
|
+
|
|
147
|
+
On macOS/Linux, ensure the script is executable:
|
|
148
|
+
```bash
|
|
149
|
+
chmod +x mcp-server/dist/index.js
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Development Mode
|
|
153
|
+
|
|
154
|
+
To develop the MCP server with auto-rebuild:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
cd mcp-server
|
|
158
|
+
npm run watch
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Changes to TypeScript will rebuild automatically. Restart Claude Desktop to pick up changes.
|
|
162
|
+
|
|
163
|
+
## Next Steps
|
|
164
|
+
|
|
165
|
+
Once the MCP server is running:
|
|
166
|
+
|
|
167
|
+
1. Try querying the VPC for your project's business context
|
|
168
|
+
2. Ask "what should I do next?" to get methodology guidance
|
|
169
|
+
3. Validate your Gherkin scenarios before implementation
|
|
170
|
+
4. Search for design patterns when refactoring
|
|
171
|
+
|
|
172
|
+
The MCP server works alongside the existing GitHub Copilot integration - use whichever AI assistant fits your workflow.
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Software Methodology MCP Server
|
|
2
|
+
|
|
3
|
+
Model Context Protocol (MCP) server providing structured access to the software methodology documentation.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Read Skills**: Access SKILL.md documentation for any of the 11 skills
|
|
8
|
+
- **Read References**: Get specific reference documents (e.g., SOLID principles, design patterns)
|
|
9
|
+
- **Query VPC**: Extract customer segments, jobs, pains, and gains from Value Proposition Canvas
|
|
10
|
+
- **Search Guidance**: Find relevant methodology content by scenario or keyword
|
|
11
|
+
- **Suggest Next Steps**: Get methodology guidance based on current project state
|
|
12
|
+
- **Validate Gherkin**: Check feature files against BDD best practices
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
**Via npm (recommended):**
|
|
17
|
+
```bash
|
|
18
|
+
npm install @schilling.mark.a/software-methodology
|
|
19
|
+
cd node_modules/@schilling.mark.a/software-methodology/mcp-server
|
|
20
|
+
npm install
|
|
21
|
+
npm run build
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**From source:**
|
|
25
|
+
```bash
|
|
26
|
+
git clone https://github.com/MarkSchilling/software-methodology.git
|
|
27
|
+
cd software-methodology/mcp-server
|
|
28
|
+
npm install
|
|
29
|
+
npm run build
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
See [QUICKSTART.md](QUICKSTART.md) for detailed setup instructions.
|
|
33
|
+
|
|
34
|
+
## Usage with Claude Desktop
|
|
35
|
+
|
|
36
|
+
Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):
|
|
37
|
+
|
|
38
|
+
**For npm installation:**
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"mcpServers": {
|
|
42
|
+
"software-methodology": {
|
|
43
|
+
"command": "node",
|
|
44
|
+
"args": [
|
|
45
|
+
"/path/to/node_modules/@schilling.mark.a/software-methodology/mcp-server/dist/index.js"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**For source installation:**
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"mcpServers": {
|
|
56
|
+
"software-methodology": {
|
|
57
|
+
"command": "node",
|
|
58
|
+
"args": [
|
|
59
|
+
"/path/to/software-methodology/mcp-server/dist/index.js"
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Available Tools
|
|
67
|
+
|
|
68
|
+
### read_skill
|
|
69
|
+
Read main SKILL.md documentation for a specific skill.
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Input: { skill_name: "atdd-workflow" }
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### list_skills
|
|
76
|
+
List all 11 available skills with descriptions.
|
|
77
|
+
|
|
78
|
+
### read_reference
|
|
79
|
+
Read a specific reference document.
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
Input: { reference_path: "clean-code/solid.md" }
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### list_references
|
|
86
|
+
List all reference documents for a skill.
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Input: { skill_name: "clean-code" }
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### query_vpc_segments
|
|
93
|
+
Get all customer segments from the Value Proposition Canvas.
|
|
94
|
+
|
|
95
|
+
### query_vpc_customer_jobs
|
|
96
|
+
Get customer jobs for a specific segment.
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
Input: { segment: "Individual Developer" }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### query_vpc_pains
|
|
103
|
+
Get pains for a specific segment.
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
Input: { segment: "Individual Developer" }
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### query_vpc_gains
|
|
110
|
+
Get gains for a specific segment.
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
Input: { segment: "Individual Developer" }
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### search_vpc
|
|
117
|
+
Search for specific terms across VPC pains and gains.
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
Input: { query: "tests" }
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### search_guidance
|
|
124
|
+
Search across all skills and references for relevant guidance.
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Input: { query: "test before code" }
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### suggest_next_step
|
|
131
|
+
Get suggestion for next methodology step based on current project state.
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
Input: { project_path: "/optional/path/to/project" }
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### validate_gherkin
|
|
138
|
+
Validate a Gherkin feature file against methodology best practices.
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
Input: { content: "Feature: ...\n As a...\n ..." }
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Development
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Watch mode during development
|
|
148
|
+
npm run watch
|
|
149
|
+
|
|
150
|
+
# Run tests
|
|
151
|
+
npm test
|
|
152
|
+
|
|
153
|
+
# Run tests in watch mode
|
|
154
|
+
npm run test:watch
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Architecture
|
|
158
|
+
|
|
159
|
+
- **index.ts**: MCP server setup and request handlers
|
|
160
|
+
- **repository.ts**: File system access and content parsing
|
|
161
|
+
- **tools/**: Individual tool implementations
|
|
162
|
+
- skill-reader.ts
|
|
163
|
+
- reference-reader.ts
|
|
164
|
+
- vpc-querier.ts
|
|
165
|
+
- guidance-searcher.ts
|
|
166
|
+
- next-step-suggester.ts
|
|
167
|
+
- gherkin-validator.ts
|
|
168
|
+
|
|
169
|
+
## License
|
|
170
|
+
|
|
171
|
+
MIT
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Software Methodology MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Provides structured access to software methodology documentation:
|
|
6
|
+
* - 11 skills (product-strategy through continuous-improvement)
|
|
7
|
+
* - Reference documents for each skill
|
|
8
|
+
* - Value Proposition Canvas queries
|
|
9
|
+
* - Guidance search across all content
|
|
10
|
+
* - Next-step suggestions based on current context
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Software Methodology MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Provides structured access to software methodology documentation:
|
|
6
|
+
* - 11 skills (product-strategy through continuous-improvement)
|
|
7
|
+
* - Reference documents for each skill
|
|
8
|
+
* - Value Proposition Canvas queries
|
|
9
|
+
* - Guidance search across all content
|
|
10
|
+
* - Next-step suggestions based on current context
|
|
11
|
+
*/
|
|
12
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
13
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
14
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
15
|
+
import { MethodologyRepository } from "./repository.js";
|
|
16
|
+
import { SkillReader } from "./tools/skill-reader.js";
|
|
17
|
+
import { ReferenceReader } from "./tools/reference-reader.js";
|
|
18
|
+
import { VPCQuerier } from "./tools/vpc-querier.js";
|
|
19
|
+
import { GuidanceSearcher } from "./tools/guidance-searcher.js";
|
|
20
|
+
import { NextStepSuggester } from "./tools/next-step-suggester.js";
|
|
21
|
+
import { GherkinValidator } from "./tools/gherkin-validator.js";
|
|
22
|
+
const server = new Server({
|
|
23
|
+
name: "software-methodology",
|
|
24
|
+
version: "0.1.0",
|
|
25
|
+
}, {
|
|
26
|
+
capabilities: {
|
|
27
|
+
tools: {},
|
|
28
|
+
resources: {},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
// Initialize repository
|
|
32
|
+
const repository = new MethodologyRepository();
|
|
33
|
+
// Initialize tools
|
|
34
|
+
const skillReader = new SkillReader(repository);
|
|
35
|
+
const referenceReader = new ReferenceReader(repository);
|
|
36
|
+
const vpcQuerier = new VPCQuerier(repository);
|
|
37
|
+
const guidanceSearcher = new GuidanceSearcher(repository);
|
|
38
|
+
const nextStepSuggester = new NextStepSuggester(repository);
|
|
39
|
+
const gherkinValidator = new GherkinValidator(repository);
|
|
40
|
+
/**
|
|
41
|
+
* List all available tools
|
|
42
|
+
*/
|
|
43
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
44
|
+
return {
|
|
45
|
+
tools: [
|
|
46
|
+
{
|
|
47
|
+
name: "read_skill",
|
|
48
|
+
description: "Read main SKILL.md documentation for a specific skill",
|
|
49
|
+
inputSchema: {
|
|
50
|
+
type: "object",
|
|
51
|
+
properties: {
|
|
52
|
+
skill_name: {
|
|
53
|
+
type: "string",
|
|
54
|
+
description: "Name of the skill (e.g., 'atdd-workflow', 'clean-code', 'product-strategy')",
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
required: ["skill_name"],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "list_skills",
|
|
62
|
+
description: "List all available skills in the methodology",
|
|
63
|
+
inputSchema: {
|
|
64
|
+
type: "object",
|
|
65
|
+
properties: {},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "read_reference",
|
|
70
|
+
description: "Read a specific reference document from a skill",
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: "object",
|
|
73
|
+
properties: {
|
|
74
|
+
reference_path: {
|
|
75
|
+
type: "string",
|
|
76
|
+
description: "Path to reference (e.g., 'clean-code/solid.md', 'atdd-workflow/red-phase.md')",
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
required: ["reference_path"],
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: "list_references",
|
|
84
|
+
description: "List all reference documents for a specific skill",
|
|
85
|
+
inputSchema: {
|
|
86
|
+
type: "object",
|
|
87
|
+
properties: {
|
|
88
|
+
skill_name: {
|
|
89
|
+
type: "string",
|
|
90
|
+
description: "Name of the skill",
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
required: ["skill_name"],
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: "query_vpc_segments",
|
|
98
|
+
description: "Get all customer segments from Value Proposition Canvas",
|
|
99
|
+
inputSchema: {
|
|
100
|
+
type: "object",
|
|
101
|
+
properties: {},
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "query_vpc_customer_jobs",
|
|
106
|
+
description: "Get customer jobs for a specific segment",
|
|
107
|
+
inputSchema: {
|
|
108
|
+
type: "object",
|
|
109
|
+
properties: {
|
|
110
|
+
segment: {
|
|
111
|
+
type: "string",
|
|
112
|
+
description: "Customer segment name (e.g., 'Individual Developer')",
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
required: ["segment"],
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: "query_vpc_pains",
|
|
120
|
+
description: "Get pains for a specific segment",
|
|
121
|
+
inputSchema: {
|
|
122
|
+
type: "object",
|
|
123
|
+
properties: {
|
|
124
|
+
segment: {
|
|
125
|
+
type: "string",
|
|
126
|
+
description: "Customer segment name",
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
required: ["segment"],
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: "query_vpc_gains",
|
|
134
|
+
description: "Get gains for a specific segment",
|
|
135
|
+
inputSchema: {
|
|
136
|
+
type: "object",
|
|
137
|
+
properties: {
|
|
138
|
+
segment: {
|
|
139
|
+
type: "string",
|
|
140
|
+
description: "Customer segment name",
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
required: ["segment"],
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: "search_vpc",
|
|
148
|
+
description: "Search for specific terms across VPC pains and gains",
|
|
149
|
+
inputSchema: {
|
|
150
|
+
type: "object",
|
|
151
|
+
properties: {
|
|
152
|
+
query: {
|
|
153
|
+
type: "string",
|
|
154
|
+
description: "Search term",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
required: ["query"],
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: "search_guidance",
|
|
162
|
+
description: "Search across all skills and references for relevant guidance",
|
|
163
|
+
inputSchema: {
|
|
164
|
+
type: "object",
|
|
165
|
+
properties: {
|
|
166
|
+
query: {
|
|
167
|
+
type: "string",
|
|
168
|
+
description: "What you're looking for (e.g., 'test before code', 'many parameters', 'hard to test')",
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
required: ["query"],
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: "suggest_next_step",
|
|
176
|
+
description: "Get suggestion for next methodology step based on current project state",
|
|
177
|
+
inputSchema: {
|
|
178
|
+
type: "object",
|
|
179
|
+
properties: {
|
|
180
|
+
project_path: {
|
|
181
|
+
type: "string",
|
|
182
|
+
description: "Path to project directory (optional, defaults to current directory)",
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: "validate_gherkin",
|
|
189
|
+
description: "Validate a Gherkin feature file against methodology best practices",
|
|
190
|
+
inputSchema: {
|
|
191
|
+
type: "object",
|
|
192
|
+
properties: {
|
|
193
|
+
content: {
|
|
194
|
+
type: "string",
|
|
195
|
+
description: "Gherkin feature file content to validate",
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
required: ["content"],
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
],
|
|
202
|
+
};
|
|
203
|
+
});
|
|
204
|
+
/**
|
|
205
|
+
* Handle tool execution
|
|
206
|
+
*/
|
|
207
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
208
|
+
const { name, arguments: args } = request.params;
|
|
209
|
+
try {
|
|
210
|
+
switch (name) {
|
|
211
|
+
case "read_skill":
|
|
212
|
+
return await skillReader.readSkill(args?.skill_name);
|
|
213
|
+
case "list_skills":
|
|
214
|
+
return await skillReader.listSkills();
|
|
215
|
+
case "read_reference":
|
|
216
|
+
return await referenceReader.readReference(args?.reference_path);
|
|
217
|
+
case "list_references":
|
|
218
|
+
return await referenceReader.listReferences(args?.skill_name);
|
|
219
|
+
case "query_vpc_segments":
|
|
220
|
+
return await vpcQuerier.getSegments();
|
|
221
|
+
case "query_vpc_customer_jobs":
|
|
222
|
+
return await vpcQuerier.getCustomerJobs(args?.segment);
|
|
223
|
+
case "query_vpc_pains":
|
|
224
|
+
return await vpcQuerier.getPains(args?.segment);
|
|
225
|
+
case "query_vpc_gains":
|
|
226
|
+
return await vpcQuerier.getGains(args?.segment);
|
|
227
|
+
case "search_vpc":
|
|
228
|
+
return await vpcQuerier.search(args?.query);
|
|
229
|
+
case "search_guidance":
|
|
230
|
+
return await guidanceSearcher.search(args?.query);
|
|
231
|
+
case "suggest_next_step":
|
|
232
|
+
return await nextStepSuggester.suggest(args?.project_path);
|
|
233
|
+
case "validate_gherkin":
|
|
234
|
+
return await gherkinValidator.validate(args?.content);
|
|
235
|
+
default:
|
|
236
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
return {
|
|
241
|
+
content: [
|
|
242
|
+
{
|
|
243
|
+
type: "text",
|
|
244
|
+
text: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
isError: true,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
/**
|
|
252
|
+
* List resources (alternative access pattern to tools)
|
|
253
|
+
*/
|
|
254
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
255
|
+
const skills = await repository.listSkills();
|
|
256
|
+
return {
|
|
257
|
+
resources: skills.map((skill) => ({
|
|
258
|
+
uri: `methodology://skill/${skill.name}`,
|
|
259
|
+
mimeType: "text/markdown",
|
|
260
|
+
name: skill.displayName,
|
|
261
|
+
description: skill.description,
|
|
262
|
+
})),
|
|
263
|
+
};
|
|
264
|
+
});
|
|
265
|
+
/**
|
|
266
|
+
* Read resource
|
|
267
|
+
*/
|
|
268
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
269
|
+
const uri = request.params.uri;
|
|
270
|
+
if (uri.startsWith("methodology://skill/")) {
|
|
271
|
+
const skillName = uri.replace("methodology://skill/", "");
|
|
272
|
+
const result = await skillReader.readSkill(skillName);
|
|
273
|
+
return {
|
|
274
|
+
contents: [
|
|
275
|
+
{
|
|
276
|
+
uri,
|
|
277
|
+
mimeType: "text/markdown",
|
|
278
|
+
text: result.content[0].text,
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
throw new Error(`Unknown resource URI: ${uri}`);
|
|
284
|
+
});
|
|
285
|
+
/**
|
|
286
|
+
* Start the server
|
|
287
|
+
*/
|
|
288
|
+
async function main() {
|
|
289
|
+
const transport = new StdioServerTransport();
|
|
290
|
+
await server.connect(transport);
|
|
291
|
+
console.error("Software Methodology MCP server running on stdio");
|
|
292
|
+
}
|
|
293
|
+
main().catch((error) => {
|
|
294
|
+
console.error("Fatal error in main():", error);
|
|
295
|
+
process.exit(1);
|
|
296
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export interface Skill {
|
|
2
|
+
name: string;
|
|
3
|
+
displayName: string;
|
|
4
|
+
description: string;
|
|
5
|
+
path: string;
|
|
6
|
+
}
|
|
7
|
+
export interface Reference {
|
|
8
|
+
name: string;
|
|
9
|
+
path: string;
|
|
10
|
+
skill: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Repository for accessing methodology files
|
|
14
|
+
*/
|
|
15
|
+
export declare class MethodologyRepository {
|
|
16
|
+
private methodologyRoot;
|
|
17
|
+
constructor();
|
|
18
|
+
/**
|
|
19
|
+
* List all available skills
|
|
20
|
+
*/
|
|
21
|
+
listSkills(): Promise<Skill[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Read a skill's main documentation
|
|
24
|
+
*/
|
|
25
|
+
readSkill(skillName: string): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* List references for a skill
|
|
28
|
+
*/
|
|
29
|
+
listReferences(skillName: string): Promise<Reference[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Read a reference document
|
|
32
|
+
*/
|
|
33
|
+
readReference(skillName: string, referenceName: string): Promise<string>;
|
|
34
|
+
/**
|
|
35
|
+
* Read VPC content
|
|
36
|
+
*/
|
|
37
|
+
readVPC(): Promise<string>;
|
|
38
|
+
/**
|
|
39
|
+
* Read story map backbone
|
|
40
|
+
*/
|
|
41
|
+
readStoryMap(): Promise<string | null>;
|
|
42
|
+
/**
|
|
43
|
+
* List feature files
|
|
44
|
+
*/
|
|
45
|
+
listFeatureFiles(projectPath?: string): Promise<string[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Search all content
|
|
48
|
+
*/
|
|
49
|
+
searchContent(query: string): Promise<Array<{
|
|
50
|
+
file: string;
|
|
51
|
+
content: string;
|
|
52
|
+
relevance: number;
|
|
53
|
+
}>>;
|
|
54
|
+
private walkDirectory;
|
|
55
|
+
private extractDescription;
|
|
56
|
+
private toDisplayName;
|
|
57
|
+
private calculateRelevance;
|
|
58
|
+
private extractRelevantSection;
|
|
59
|
+
}
|