SSW Rules MCP
Allows OpenAI's Codex to search, retrieve, and browse SSW Rules via the Model Context Protocol.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SSW Rules MCPfind rules about pull request best practices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SSW Rules MCP
Unofficial community-built CLI tools and MCP server for searching SSW Rules with semantic search.
SSW Rules is a collection of 3,700+ best-practice rules covering software engineering, project delivery, communication, and more.
What it does
MCP Server — Exposes SSW Rules to AI agents (Claude Code, VS Code Copilot, Codex, LM Studio) via the Model Context Protocol
Semantic Search — Find rules by meaning, not just keywords (e.g. "how to handle technical debt" finds "Do you know the importance of paying back Technical Debt?")
CLI Tools — Search, browse, and read SSW Rules from the terminal
Auto-sync — Automatically clones and updates SSW.Rules.Content from GitHub
Related MCP server: Axon.MCP.Server
Prerequisites
Quick Start
1. Install
git clone https://github.com/jernejk/SSW.Rules.Mcp.git
cd SSW.Rules.Mcp
uv tool install .This makes the ssw-rules command available system-wide.
To update after pulling new changes:
cd SSW.Rules.Mcp
git pull
uv tool install --force --reinstall .To uninstall:
uv tool uninstall ssw-rules-mcpgit clone https://github.com/jernejk/SSW.Rules.Mcp.git
cd SSW.Rules.Mcp
uv syncThen prefix all commands with uv run:
uv run ssw-rules index
uv run ssw-rules search "definition of done"2. Start Qdrant
docker run -d -p 6333:6333 qdrant/qdrant3. Build the search index
ssw-rules indexThis will:
Clone SSW.Rules.Content (shallow clone, ~1 min)
Parse all ~3,700 rules from MDX files
Generate embeddings with
all-MiniLM-L6-v2(downloads 90MB model on first run)Store vectors in Qdrant (~6MB, takes ~2 min)
On subsequent runs, it does git pull to get the latest rules before re-indexing.
4. Search!
ssw-rules search "definition of done"CLI Reference
Command | Description |
| Clone/pull rules and build Qdrant search index |
| Rebuild index without git pull |
| Semantic search across all rules |
| Get the full content of a specific rule |
| List all categories and subcategories |
| List rules in a specific category |
| Show recently updated rules |
| Configure local SSW.Rules.Content path |
| Show current configuration |
| Reset all settings to defaults |
| Start the MCP server (stdio) |
Search
ssw-rules search "pull request best practices"
ssw-rules search "technical debt" --limit 5
ssw-rules search "email etiquette" --json
ssw-rules search "scrum ceremonies" --include-archivedGet a specific rule
ssw-rules get 3-steps-to-a-pbi
ssw-rules get definition-of-done --jsonBrowse categories
ssw-rules categories
ssw-rules category rules-to-better-scrum-using-azure-devopsRecently updated rules
ssw-rules recent # Last 30 days
ssw-rules recent --days 7 # Last week
ssw-rules recent --json # JSON outputJSON Output
Add --json to any command for machine-readable output:
ssw-rules search "testing" --json
ssw-rules get definition-of-done --json
ssw-rules categories --jsonSource Configuration
By default, ssw-rules index clones SSW.Rules.Content into ~/.config/ssw-rules-mcp/data/. To use an existing local clone instead:
ssw-rules source ~/Developer/SSW.Rules.ContentTo use a fork:
ssw-rules source --repo https://github.com/my-fork/SSW.Rules.Content.gitMCP Server
The MCP server exposes SSW Rules to AI agents via stdio transport.
Tools
Tool | Description |
| Semantic search across all SSW Rules |
| Get full content of a rule by its URI slug |
| Browse the category hierarchy |
| Get all rules in a category |
| Get recently updated rules |
Claude Code
Add to your Claude Code MCP settings (~/.claude/settings.json):
{
"mcpServers": {
"ssw-rules": {
"command": "ssw-rules",
"args": ["mcp"]
}
}
}Note: This requires the global install (
uv tool install .). If usinguv runinstead, use"command": "uv", "args": ["run", "--directory", "/path/to/SSW.Rules.Mcp", "ssw-rules", "mcp"].
Then ask Claude things like:
"Search SSW Rules for definition of done"
"What are the SSW rules about pull requests?"
"Get the SSW rule about technical debt"
"What SSW Rules categories exist?"
VS Code (Copilot / Continue)
Add to your VS Code settings (.vscode/settings.json or user settings):
{
"mcp": {
"servers": {
"ssw-rules": {
"command": "ssw-rules",
"args": ["mcp"]
}
}
}
}Codex (OpenAI CLI)
{
"mcpServers": {
"ssw-rules": {
"command": "ssw-rules",
"args": ["mcp"]
}
}
}LM Studio
Configure a new MCP server:
Name: SSW Rules
Command:
ssw-rulesArguments:
mcpTransport: stdio
Using with SugarLearning MCP
SSW Rules MCP is designed to work alongside SugarLearning MCP for comprehensive SSW process guidance:
SSW Rules — Public best-practice rules (this tool)
SugarLearning — Internal training modules and learning paths
Configure both in Claude Code:
{
"mcpServers": {
"ssw-rules": {
"command": "ssw-rules",
"args": ["mcp"]
},
"sugarlearning": {
"command": "sl",
"args": ["mcp"]
}
}
}Then ask Claude to combine knowledge from both sources:
"What SSW rules apply to the Spec Reviews training module?"
"Create onboarding instructions using SSW Rules and SugarLearning modules"
How Search Works
SSW Rules MCP uses a semantic search approach powered by:
sentence-transformers with the
all-MiniLM-L6-v2model (384-dimensional embeddings, runs locally, no API key needed)Qdrant vector database for fast similarity search
Text search fallback when Qdrant is unavailable
Each rule is indexed with its title, SEO description, and a preview of its content. Search queries are embedded with the same model and compared using cosine similarity.
With 3,700+ rules, the Qdrant collection uses ~6MB of storage. Indexing takes about 2 minutes.
Project Structure
SSW.Rules.Mcp/
├── src/ssw_rules_mcp/
│ ├── cli.py # Click CLI entry point
│ ├── config.py # Pydantic settings (.env)
│ ├── models.py # Pydantic models (Rule, Category)
│ ├── parser.py # MDX frontmatter parsing + JSX stripping
│ ├── qdrant_index.py # Qdrant vector indexing + search
│ ├── categories.py # Category hierarchy parser
│ └── mcp_server.py # FastMCP server
├── tests/ # pytest test suite
├── .env.example # Configuration template
└── pyproject.toml # Project definitionConfiguration
All settings use the SSW_RULES_ prefix and can be set via environment variables or ~/.config/ssw-rules-mcp/.env:
Variable | Default | Description |
|
| Path to SSW.Rules.Content repo |
|
| Git repo URL for auto-clone |
|
| Qdrant server URL |
|
| Qdrant collection name |
Running Tests
uv run --extra dev pytestLicense
MIT
Available Tools
5 toolsget_category_rulesGet Category RulesA
Get all rules in a specific category.
Works for both top-level categories (returns all rules across subcategories) and subcategories (returns just that subcategory's rules).
| Name | Required | Description | Default |
|---|---|---|---|
| category_uri | Yes | The category URI slug (e.g. 'software-engineering', 'rules-to-better-scrum-using-azure-devops'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that top-level categories return rules across subcategories while subcategories return only their own rules, which is real behavioral context. However, it omits read-only confirmation, pagination behavior, and result limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded, no wasted words. The scope nuance is stated immediately after the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description resolves the main ambiguity (category-level scoping). For a single-parameter read tool with full schema coverage, this is essentially complete, though it could note read-only nature or result size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the category_uri slug and examples already documented. The description adds no additional parameter meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all rules in a specific category') and the scope distinction between top-level and subcategory is clear. It does not explicitly differentiate itself from the singular sibling get_rule or search_rules, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool behaves a certain way (by category level) but never states when to choose this over get_rule, search_rules, or get_recent_rules. Usage is left to inference from the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_rulesGet Recent RulesC
Get recently updated SSW Rules.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to look back (default 30). | |
| limit | No | Maximum results (default 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says nothing about sort order, whether results are newest-first, whether 'updated' versus 'created' matters, or any pagination behavior beyond the raw defaults. For a list tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste and the core concept front-loaded. It is efficient, though arguably under-specified rather than optimally concise for a tool with two behavioral parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The parameters are fully documented in the schema, but the absence of annotations plus the lack of any usage routing or ordering semantics leaves real gaps for an agent deciding between this and its four siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both days and limit fully documented in the schema, so the baseline of 3 applies. The description adds no syntax, unit, or interaction detail (e.g., whether limit truncates the most recent or oldest entries) beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and a well-defined resource (recently updated SSW Rules), which is clearer than a tautology. However, it does nothing to distinguish itself from the sibling search_rules or get_rule — an agent must infer that this is the chronological/browse variant rather than a search or single-fetch tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of search_rules, get_rule, or get_category_rules. 'Recently updated' hints at a recency-browsing use case, but no exclusions or alternative-routing conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ruleGet RuleA
Get the full content of a specific SSW Rule by its URI slug.
Returns the rule's title, URL, metadata, and full cleaned markdown content. The content has JSX components stripped for clean reading.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | The rule URI slug (e.g. '3-steps-to-a-pbi', 'definition-of-done'). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a non-obvious behavioral trait: the returned content is cleaned markdown with JSX components stripped, so an agent knows not to expect raw source. It still omits error behavior for an unknown slug and any read-only/auth guarantees, though 'Get' strongly implies a safe read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and key, with no filler. The middle sentence restates return fields that the output schema already defines, which is mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be re-explained, and the description covers purpose, key, and content processing adequately. It could be fully complete by pointing at search_rules as the way to obtain a slug.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already provides example slugs, so the description's 'by its URI slug' adds no syntax or meaning beyond it. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (a specific SSW Rule) plus the exact lookup key (URI slug), which separates it from the list/search siblings at a glance. It never names a sibling outright, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is only an implicit hint that the caller must already know the slug ('by its URI slug'), which suggests search_rules might precede this call, but no when-to-use statement, no exclusions, and no alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesList CategoriesB
List all SSW Rules categories in the hierarchy.
Returns top-level categories (e.g. Software Engineering, Communication) with their subcategories and rule counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the shape of the result (top-level categories, subcategories, rule counts), which signals a read-only listing operation, but it says nothing about ordering, caching, or completeness guarantees — reasonable but not rich for a zero-parameter read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded and the return shape second. No filler, though the second sentence partially restates what the output schema already conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, and there are no parameters to cover. The definition is nearly complete for such a simple tool; the missing piece is any hint of when to prefer it over get_category_rules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline there is nothing for the description to document. No misleading parameter language is present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all SSW Rules categories in the hierarchy') and clarifies the granularity by explaining it returns top-level categories with subcategories and rule counts. It is clearly distinguishable from get_category_rules in practice, but it never names or contrasts a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. The description does not mention that this is a discovery/navigation step before calling get_category_rules, nor does it state any conditions or alternatives. Usage is only inferable from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_rulesSearch RulesA
Semantic search across all SSW Rules (https://ssw.com.au/rules).
Returns matching rules with title, URL, description, and relevance score. Requires Qdrant to be running and indexed (run 'ssw-rules index' first). Falls back to text search if Qdrant is unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 10). | |
| query | Yes | Natural language search query (e.g. "definition of done", "pull request best practices"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does reasonably well. It discloses return fields (title, URL, description, relevance score), a critical operational dependency (Qdrant must be running and indexed), and fallback behavior to text search. It doesn't mention error handling or what happens if both search methods fail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place. The purpose is front-loaded, followed by return format, prerequisite, and fallback behavior. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values needn't be fully detailed, yet the description still usefully summarizes return fields. It covers prerequisites and fallback behavior, which are critical operational details not covered by schema or annotations. The main omission is guidance on when to prefer this tool over siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (query, limit) are already documented in the schema. The description adds no parameter-level information beyond what the schema provides. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Semantic search across all SSW Rules'. This distinguishes it from retrieval siblings like get_rule (singular retrieval) and get_recent_rules (time-based filtering). It doesn't explicitly name siblings, but the scope of 'all SSW Rules' is clear enough to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when you need to search rules by query. The description mentions the Qdrant dependency and fallback behavior, which are operational prerequisites rather than usage guidance. There's no explicit when-to-use or when-not-to-use vs alternatives like get_recent_rules or list_categories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
get_category_rules - First observed
get_recent_rules - First observed
get_rule - First observed
list_categories - First observed
search_rules
TDQS
Scored across 5 tools
Each tool targets a distinct retrieval mode: recent updates, semantic search, full rule content by slug, category hierarchy, and category-filtered rules. There is no overlap that would lead an agent to misselect.
All tools follow a clear snake_case verb_noun pattern (get_recent_rules, search_rules, get_rule, list_categories, get_category_rules). Minor verb variation between get and list is standard and predictable.
Five tools form a tight, well-scoped set for a read-only rules knowledge base. No redundant or missing operations are apparent at this scale.
The set covers discovery (recent, search, categories) and retrieval (full rule content, category-filtered lists). For a read-only reference, the surface is complete with no dead ends.
Maintenance
Related MCP Connectors
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server for semantic code search & navigation that helps AI agents work efficiently without burning through costly tokens. Instead of reading entire files, agents can search conceptually and jump directly to the specific functions, classes, and code chunks they need.119MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that transforms codebases into intelligent, queryable knowledge bases, enabling AI assistants to perform semantic search, explore architecture, and analyze code relationships.167-
- AlicenseAqualityDmaintenanceMCP server for semantic code indexing using vector embeddings, enabling AI agents to maintain persistent memory of codebases through natural language queries and intelligent chunking.193 npm4MIT
- AlicenseAqualityFmaintenanceMCP server for semantic code search that indexes your codebase and allows AI editors to search using natural language queries.953 npm53MIT