An MCP (Model Context Protocol) server providing expert guidance on requirements management best practices from "The Essential Guide to Requirements Management and Traceability" by Jama Softare. A future release will add best practices from the INCOSE Guide and EARS documentation.
- FastMCP Server: Remote MCP server with Streamable HTTP transport, compatible with any LLM
- Vector Search: Semantic search over requirements management guidance
- Multi-Source: Supports multiple authoritative sources (Jama Guide, INCOSE, EARS)
- Voyage AI Embeddings: High-quality embeddings optimized for technical content
- Docker Ready: Containerized for easy deployment
- Abstraction Layers: Swap embedding providers or vector stores without code changes
- Docker and Docker Compose
- Voyage AI API key (get one here)
- Content files (JSONL format) in the
content/directory
cd requirements-advisor
# Create environment file
cp .env.example .env
# Edit .env and add your Voyage API key
nano .env # or use your preferred editorPlace your scraped content in the content/ directory:
requirements_management_guide.jsonl- Jama Guide (from jama-guide-scraper)incose_gwr.jsonl- INCOSE Guide (future)ears_notation.jsonl- EARS documentation (future)
# Build the container
docker compose build
# Ingest content into vector store
docker compose run --rm ingestion
# Start the server
docker compose up -d
# Check logs
docker compose logs -f mcp-serverThe MCP server is now running at http://localhost:8000/mcp
Goal: Quick demonstration of the MCP server capabilities
Run on your laptop during the meeting:
# Ensure content is ingested
docker compose run --rm ingestion
# Start server
docker compose up
# Server available at http://localhost:8000/mcpConnect with Claude Desktop or any MCP-compatible client (see "Connecting Clients" below).
Deploy to a cloud provider for a persistent demo URL:
Railway (Simplest)
# Install Railway CLI
npm install -g @railway/cli
# Login and deploy
railway login
railway init
railway up
# Set environment variables in Railway dashboard
# Get public URL from RailwayRender
# Create render.yaml
# Push to GitHub
# Connect repo in Render dashboard
# Set VOYAGE_API_KEY in environmentAWS/GCP/Azure
# Build and push to container registry
docker build -t requirements-advisor .
docker tag requirements-advisor:latest <your-registry>/requirements-advisor:latest
docker push <your-registry>/requirements-advisor:latest
# Deploy to ECS/Cloud Run/Container AppsFor any cloud deployment, you'll need to:
- Persist the ChromaDB volume or migrate to a managed vector store
- Set
VOYAGE_API_KEYas an environment variable/secret - Configure appropriate networking/firewall rules
Goal: Run everything locally for development and testing
# 1. Start everything
docker compose up
# 2. In another terminal, test the search
docker compose exec mcp-server python -m requirements_advisor.cli test-search "how to write requirements"
# 3. Make changes and rebuild
docker compose up --build# 1. Install UV if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. Create virtual environment and install dependencies
uv sync
# 3. Set up environment
cp .env.example .env
# Edit .env with your VOYAGE_API_KEY
# 4. Ingest content
uv run requirements-advisor ingest
# 5. Start server
uv run requirements-advisor serve
# 6. Or run directly with Python
source .venv/bin/activate
python -m requirements_advisor.cli serve# 1. Create virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 2. Install package
pip install -e .
# 3. Configure and run
cp .env.example .env
# Edit .env
requirements-advisor ingest
requirements-advisor serveAdd to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"requirements-advisor": {
"url": "http://localhost:8000/mcp"
}
}
}Restart Claude Desktop to connect.
# Add the MCP server
claude mcp add requirements-advisor --url http://localhost:8000/mcpAny MCP-compatible client can connect via Streamable HTTP transport at:
http://localhost:8000/mcp
For remote deployments, replace localhost:8000 with your server URL.
| Property | Value |
|---|---|
| Name | requirements-advisor |
| Transport | Streamable HTTP (/mcp endpoint) |
| Description | Expert guidance on requirements management best practices. Provides answers from authoritative sources including Jama Software's Essential Guide to Requirements Management, INCOSE guidelines, and EARS notation. |
This server exposes 4 tools. No resources or prompts are provided.
Search requirements management best practices and guidance.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query |
string |
Yes | - | Natural language question about requirements management |
top_k |
integer |
No | 5 |
Number of results to return (1-10) |
source |
string |
No | null |
Filter by source: "jama_guide", "incose", or "ears" |
include_images |
boolean |
No | true |
Include related images in response |
Returns: List of relevant guidance excerpts with source citations and optional images.
Use for: Writing requirements, traceability, validation/verification, regulatory compliance, systems engineering, industry-specific practices (medical, automotive, aerospace).
Get the definition of a requirements management term or acronym.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
term |
string |
Yes | - | The term or acronym to define |
Returns: Definition with source attribution.
Use for: Terms like SRS, EARS, Traceability, V&V, RTM, and other requirements management terminology.
List the topics and sources available in the knowledge base.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| (none) | - | - | - | - |
Returns: Summary of available topics, sources, and document count.
Use for: Understanding what guidance is available before searching.
Get best practices for a specific requirements management topic.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
topic |
string |
Yes | - | The topic to get best practices for |
include_images |
boolean |
No | true |
Include related images in response |
Returns: Best practices with explanations, source citations, and optional images.
Use for: Topics like writing requirements, traceability, validation, change management, regulatory compliance, agile requirements.
"How do I write good functional requirements?"
"What is requirements traceability and why does it matter?"
"Best practices for medical device requirements"
"Define EARS notation"
"What are non-functional requirements?"
# Start the MCP server
requirements-advisor serve [--host 0.0.0.0] [--port 8000]
# Ingest content into vector store
requirements-advisor ingest [--content-dir ./content] [--clear]
# Show configuration and status
requirements-advisor info
# Test a search query
requirements-advisor test-search "your query here" [--top-k 5]requirements-advisor/
├── pyproject.toml # Python package configuration
├── Dockerfile # Container image definition
├── docker-compose.yml # Multi-container orchestration
├── .env.example # Environment template
├── src/requirements_advisor/
│ ├── __init__.py
│ ├── cli.py # Typer CLI commands
│ ├── config.py # Pydantic settings
│ ├── logging.py # Loguru logging configuration
│ ├── server.py # FastMCP server + tools
│ ├── embeddings/
│ │ ├── base.py # Abstract interface
│ │ └── voyage.py # Voyage AI implementation
│ ├── vectorstore/
│ │ ├── base.py # Abstract interface
│ │ └── chroma.py # ChromaDB implementation
│ ├── images/
│ │ ├── base.py # Image models (CachedImage, ImageIndex)
│ │ └── cache.py # Image fetching and caching
│ └── ingestion/
│ └── pipeline.py # Content ingestion
├── tests/ # Test suite
│ ├── conftest.py # Pytest fixtures
│ └── test_*.py # Test modules
├── content/ # JSONL content files
│ └── requirements_management_guide.jsonl
└── data/ # Persistent data (gitignored)
├── chroma/ # Vector store
└── images/ # Cached images
All configuration via environment variables (or .env file):
| Variable | Required | Default | Description |
|---|---|---|---|
VOYAGE_API_KEY |
✅ | - | Voyage AI API key |
VOYAGE_MODEL |
voyage-context-3 |
Embedding model (contextualized) | |
VOYAGE_BATCH_SIZE |
20 |
Texts per embedding API call | |
VECTOR_STORE_TYPE |
chroma |
Vector store backend | |
VECTOR_STORE_PATH |
./data/chroma |
Local storage path | |
COLLECTION_NAME |
requirements_guidance |
Collection name | |
CONTENT_DIR |
./content |
Content files location | |
IMAGE_CACHE_PATH |
./data/images |
Image cache directory | |
IMAGE_MAX_DIMENSION |
1024 |
Max image dimension (pixels) | |
IMAGE_QUALITY |
85 |
JPEG compression quality | |
IMAGE_FETCH_TIMEOUT |
30 |
Image fetch timeout (seconds) | |
HOST |
0.0.0.0 |
Server bind host | |
PORT |
8000 |
Server bind port | |
LOG_LEVEL |
INFO |
Logging level | |
LOG_JSON |
false |
JSON log output format |
- Qdrant vector store support for remote/managed deployment
- Additional embedding providers (OpenAI, Cohere)
- INCOSE Guide for Writing Requirements content
- EARS notation documentation
- Helm chart for Kubernetes deployment
- Authentication/API key support
- Usage analytics and feedback
"VOYAGE_API_KEY not set"
- Ensure
.envfile exists with valid API key - Check key is exported:
echo $VOYAGE_API_KEY
"No documents in vector store"
- Run ingestion:
docker compose run --rm ingestion - Check content directory has JSONL files
"Connection refused" from client
- Ensure server is running:
docker compose ps - Check port 8000 is not blocked
- Verify URL in client config matches server
Docker build fails
- Ensure Docker is running
- Try:
docker compose build --no-cache
MIT License - See LICENSE file for details.