Date: October 11, 2025 Purpose: Easy way to start and iterate on agentic AI projects Initial Focus: MCP server template scaffolding and code generation
Goal: Build a CLI tool that simplifies creating and iterating on AI agent projects, starting with MCP servers and expanding to full agent workflows.
Inspiration: Ignite CLI's approach to scaffolding and code generation, adapted for the AI/agent development ecosystem.
Technology Stack Decision: Python-based CLI (aligns with CLAUDE.md preferences and existing ecosystem)
CLI Framework:
- Click - Command hierarchy and argument parsing
- Rich - Beautiful terminal output, progress bars, syntax highlighting
- Questionary - Interactive prompts with validation
Template Engine:
- Jinja2 - Template rendering
- PyYAML - YAML-based configuration and prompts
File Operations:
- pathlib - Modern path handling
- shutil - File/directory operations
- gitpython - Git operations for cloning templates
Utilities:
- httpx - HTTP client for fetching resources
- appdirs - Platform-appropriate cache/config directories
- tomlkit - TOML manipulation (for pyproject.toml)
Distribution:
- pipx - Zero-installation execution
- PyPI - Package distribution
- hatch or poetry - Build system
Based on your CLAUDE.md preferences:
- Your stack is Python/FastAPI
- MCP servers are likely FastMCP (Python)
- Agent frameworks: LangChain/LangGraph (Python)
- Consistency with existing tooling
Trade-off: pipx instead of npx, but same zero-installation experience.
Option A: Verb-Noun Pattern (Recommended)
# Create new projects
fips-agents create mcp-server my-server
fips-agents create agent my-agent
fips-agents create workflow my-workflow
# Generate components
fips-agents generate tool weather-tool
fips-agents generate prompt data-analysis
fips-agents generate resource config-loader
# Utility commands
fips-agents check # Environment diagnostics
fips-agents list # List available templates
fips-agents cache clear # Clear cacheOption B: Noun-Verb Pattern (Alternative)
# Create new projects
fips-agents mcp-server create my-server
fips-agents agent create my-agent
# Generate components
fips-agents tool generate weather-tool
fips-agents prompt generate data-analysisOption C: Hybrid Pattern (Your Original, Adapted)
# Create new projects
fips-agents new mcp-server my-server
fips-agents new agent my-agent
# Generate components
fips-agents gen tool weather-tool
fips-agents gen prompt data-analysisRecommendation: Option A (Verb-Noun)
- Most intuitive for users
- Follows Ignite pattern
- Clear action hierarchy
- Easy to extend
Support shortcuts for common operations:
fips-agents create → fips-agents c
fips-agents generate → fips-agents g, fips-agents gen
fips-agents check → fips-agents doctor# Zero-installation (via pipx)
pipx run fips-agents-cli create mcp-server weather-service
# After installation
pipx install fips-agents-cli
fips-agents create mcp-server weather-service
# With options
fips-agents create mcp-server weather-service \
--transport http \
--python-version 3.11 \
--openshift \
--yes
# Interactive mode (prompts for options)
fips-agents create mcp-server weather-service
# Generate components
cd weather-service
fips-agents generate tool get-weather
fips-agents generate prompt weather-analysis
fips-agents generate resource configfips-agents-cli/
├── pyproject.toml # Project metadata and dependencies
├── README.md # User documentation
├── LICENSE # License file
├── .github/
│ └── workflows/
│ ├── test.yml # CI pipeline
│ └── release.yml # Release automation
├── src/
│ └── fips_agents_cli/
│ ├── __init__.py
│ ├── __main__.py # Entry point for python -m
│ ├── cli.py # Main CLI entry point
│ ├── version.py # Version info
│ │
│ ├── commands/ # Command implementations
│ │ ├── __init__.py
│ │ ├── create.py # Create new projects
│ │ ├── generate.py # Generate components
│ │ ├── check.py # Environment check
│ │ ├── list.py # List templates
│ │ └── cache.py # Cache management
│ │
│ ├── tools/ # Reusable utilities
│ │ ├── __init__.py
│ │ ├── git.py # Git operations (clone, etc.)
│ │ ├── templates.py # Template rendering
│ │ ├── filesystem.py # File operations
│ │ ├── validation.py # Input validation
│ │ └── prompts.py # Interactive prompts
│ │
│ ├── templates/ # Built-in template definitions
│ │ ├── __init__.py
│ │ └── registry.yaml # Template registry
│ │
│ └── config/ # Configuration
│ ├── __init__.py
│ ├── defaults.py # Default values
│ └── cache.py # Cache management
│
├── tests/ # Test suite
│ ├── __init__.py
│ ├── conftest.py # Pytest fixtures
│ ├── test_create.py
│ ├── test_generate.py
│ ├── test_git.py
│ └── integration/ # Integration tests
│ └── test_full_workflow.py
│
└── docs/ # Documentation
├── commands.md # Command reference
├── templates.md # Template system
└── development.md # Development guide
After running fips-agents create mcp-server weather-service:
weather-service/
├── pyproject.toml
├── README.md
├── Containerfile # Podman/OpenShift
├── .gitignore
├── .python-version # pyenv version pinning
│
├── src/
│ └── weather_service/
│ ├── __init__.py
│ ├── server.py # FastMCP server
│ └── tools/ # MCP tools
│ └── __init__.py
│
├── prompts/ # YAML prompts (per CLAUDE.md)
│ └── README.md
│
├── resources/ # MCP resources
│ └── README.md
│
├── tests/
│ ├── __init__.py
│ └── test_server.py
│
├── manifests/ # OpenShift manifests (optional)
│ ├── base/
│ │ ├── kustomization.yaml
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ └── overlays/
│ ├── dev/
│ ├── staging/
│ └── production/
│
└── .cli/ # CLI generator templates
├── config.yaml # Project-specific CLI config
└── generators/ # Copied from fips-agents-cli
├── tool/
│ ├── template.yaml
│ └── tool.py.j2
├── prompt/
│ └── prompt.yaml.j2
└── resource/
└── resource.py.j2
templates/registry.yaml in the CLI:
templates:
mcp-server:
name: "MCP Server"
description: "FastMCP server with tools, prompts, and resources"
repository: "https://github.com/rdwj/mcp-server-template"
branch: "main"
type: "project"
tags:
- mcp
- server
- fastmcp
agent:
name: "LangGraph Agent"
description: "LangGraph-based agent with workflow"
repository: "https://github.com/rdwj/agent-template"
branch: "main"
type: "project"
tags:
- agent
- langgraph
- workflow
workflow:
name: "Standalone Workflow"
description: "LangGraph workflow without full agent scaffolding"
repository: "https://github.com/rdwj/workflow-template"
branch: "main"
type: "project"
tags:
- workflow
- langgraphIn the generated project: .cli/generators/tool/template.yaml
name: "MCP Tool Generator"
description: "Generate a new MCP tool"
version: "1.0.0"
prompts:
- name: tool_name
type: text
message: "Tool name (e.g., get_weather)"
validate: "^[a-z][a-z0-9_]*$"
- name: tool_description
type: text
message: "Tool description"
required: true
- name: has_parameters
type: confirm
message: "Does this tool accept parameters?"
default: true
files:
- template: "tool.py.j2"
output: "src/{{ project_name }}/tools/{{ tool_name }}.py"
- template: "test_tool.py.j2"
output: "tests/test_{{ tool_name }}.py"
post_generate:
- action: "message"
text: "✓ Generated tool: {{ tool_name }}"
- action: "message"
text: "Next steps:"
- action: "message"
text: " 1. Implement tool logic in src/{{ project_name }}/tools/{{ tool_name }}.py"
- action: "message"
text: " 2. Register tool in src/{{ project_name }}/server.py"
- action: "message"
text: " 3. Run tests: pytest tests/test_{{ tool_name }}.py".cli/generators/tool/tool.py.j2
"""{{ tool_description }}"""
from typing import Any, Dict
from fastmcp import Context
{% if has_parameters %}
async def {{ tool_name }}(
context: Context,
{% for param in parameters %}
{{ param.name }}: {{ param.type }},
{% endfor %}
) -> Dict[str, Any]:
"""
{{ tool_description }}
Args:
{% for param in parameters %}
{{ param.name }}: {{ param.description }}
{% endfor %}
Returns:
Dict containing the tool result
"""
# TODO: Implement tool logic
return {
"status": "success",
"message": "{{ tool_name }} executed"
}
{% else %}
async def {{ tool_name }}(context: Context) -> Dict[str, Any]:
"""
{{ tool_description }}
Returns:
Dict containing the tool result
"""
# TODO: Implement tool logic
return {
"status": "success",
"message": "{{ tool_name }} executed"
}
{% endif %}Goal: Basic project creation from git templates
Features:
- ✅ CLI framework setup (Click + Rich)
- ✅
fips-agents create mcp-server <name>command - ✅ Git clone template repository
- ✅ Project name validation
- ✅ Directory structure verification
- ✅ Basic error handling
Deliverables:
- Working
createcommand - Can clone mcp-server-template
- Basic terminal output with Rich
- Initial tests
Commands Available:
fips-agents create mcp-server my-server
fips-agents create mcp-server my-server --yes # Non-interactiveGoal: Rich user experience with prompts and configuration
Features:
- ✅ Interactive prompts (Questionary)
- ✅ Configuration options:
- Python version (3.11, 3.12)
- Transport type (stdio, http)
- OpenShift manifests (yes/no)
- FIPS mode (yes/no)
- ✅
--yesflag for non-interactive mode - ✅ Progress indicators (spinners)
- ✅ Better error messages
Commands Available:
# Interactive
fips-agents create mcp-server my-server
# Non-interactive with options
fips-agents create mcp-server my-server \
--python-version 3.11 \
--transport http \
--openshift \
--fips \
--yesGoal: Generate components within projects
Features:
- ✅
fips-agents generate tool <name>command - ✅ Load generator templates from
.cli/generators/ - ✅ Jinja2 template rendering
- ✅ Variable substitution
- ✅ File creation
- ✅ Copy generators into new projects during creation
Commands Available:
cd my-server
fips-agents generate tool get_weather
fips-agents generate tool search_documents --asyncGoal: Complete MCP server component generation
Features:
- ✅
fips-agents generate prompt <name>command - ✅
fips-agents generate resource <name>command - ✅ YAML prompt templates
- ✅ Resource scaffolding
Commands Available:
fips-agents generate prompt data-analysis
fips-agents generate resource config-loaderGoal: Multiple templates and performance optimization
Features:
- ✅ Template registry system
- ✅
fips-agents listcommand (show available templates) - ✅ Local template caching
- ✅
fips-agents cache clearcommand - ✅ Custom template repositories
Commands Available:
fips-agents list # List all templates
fips-agents list --tags mcp # Filter by tag
fips-agents cache clear # Clear template cache
fips-agents create agent my-agent # Use different templateGoal: Help users debug their environment
Features:
- ✅
fips-agents checkcommand - ✅ Verify Python version
- ✅ Check for required tools (git, podman, oc)
- ✅ FIPS mode detection
- ✅ OpenShift connection test
Commands Available:
fips-agents check
fips-agents doctor # AliasGoal: Production-ready release
Features:
- ✅ Comprehensive test suite
- ✅ Integration tests
- ✅ Documentation site
- ✅ Example projects
- ✅ Tutorial walkthrough
Deliverables:
- ≥80% test coverage
- Complete documentation
- Published to PyPI
- CI/CD pipeline
New Templates:
- LangGraph agent template
- LlamaStack agent template
- Multi-agent system template
New Commands:
fips-agents create agent my-agent
fips-agents create multi-agent my-system
fips-agents generate node decision-node
fips-agents generate edge conditional-edgeFeatures:
- Workflow scaffolding
- Node generation
- Edge configuration
- State management
New Commands:
fips-agents create workflow order-processing
fips-agents generate node validate-order
fips-agents generate node process-payment
fips-agents generate edge success-pathFeatures:
- Deploy to OpenShift
- Manifest generation
- Kustomize overlays
- ArgoCD integration
New Commands:
fips-agents deploy
fips-agents deploy --namespace my-agents --env production
fips-agents logs my-server
fips-agents status
fips-agents scale --replicas 3Features:
- Local (non-MCP) tools
- Custom agent types
- Integration with external APIs
- Batch generation
New Commands:
fips-agents generate local-tool my-tool
fips-agents generate api-integration weather-api
fips-agents generate batch --from schema.yamlFeatures:
- Third-party template plugins
- Custom generator plugins
- Template marketplace
New Commands:
fips-agents plugin install company-templates
fips-agents plugin list
fips-agents create company-agent my-agent# Create project
mkdir fips-agents-cli
cd fips-agents-cli
# Initialize with hatch
hatch new .
# Or manually create structure
mkdir -p src/fips_agents_cli/{commands,tools,templates,config}
mkdir -p tests/{unit,integration}Files to create:
pyproject.toml- Project metadatasrc/fips_agents_cli/cli.py- Main entry pointsrc/fips_agents_cli/version.py- Version managementsrc/fips_agents_cli/commands/create.py- Create commandsrc/fips_agents_cli/tools/git.py- Git operationstests/test_create.py- Initial tests
Implement:
- Click command structure
- Rich console for output
- Basic error handling
- Version command
- Help system
Test:
fips-agents --version
fips-agents --help
fips-agents create --helpImplement:
- Clone repository function
- Template validation
- Directory creation
- Git initialization
Test:
fips-agents create mcp-server test-server
cd test-server
git status # Should be initializedImplement:
- Rename project files
- Update pyproject.toml
- Replace placeholder names
- Basic validation
Test:
fips-agents create mcp-server weather-service
cd weather-service
grep -r "weather-service" . # Should find project nameImplement:
- Questionary integration
- Prompt flow
- Option validation
--yesflag support
Test:
fips-agents create mcp-server my-server # Interactive
fips-agents create mcp-server my-server --yes # Skip promptsImplement:
- Comprehensive error messages
- Progress indicators
- Success messaging
- Integration tests
Question: Your command examples use npx, but CLAUDE.md specifies Python. Confirm Python?
Recommendation: Python with pipx
- Aligns with ecosystem (FastAPI, LangGraph, FastMCP)
- Consistent with CLAUDE.md preferences
- Same zero-installation experience
If Python:
pipx run fips-agents-cli create mcp-server my-server
# or
pipx install fips-agents-cli
fips-agents create mcp-server my-serverIf Node.js:
npx fips-agents-cli create mcp-server my-server
# or
npm install -g fips-agents-cli
fips-agents create mcp-server my-serverQuestion: Which command pattern do you prefer?
Option A (Recommended):
fips-agents create mcp-server my-server
fips-agents generate tool weather-toolOption B:
fips-agents new mcp-server my-server
fips-agents gen tool weather-toolOption C:
fips-agents mcp-server create my-server
fips-agents tool generate weather-toolQuestion: Should we clone your template repos directly, or copy them into the CLI?
Option A (Recommended): Clone from Git
- Templates stay in separate repos
- Easy to update templates independently
- Users can fork and customize templates
- CLI just knows the repo URLs
Option B: Bundle in CLI
- Faster (no network call)
- Works offline
- But harder to update templates
Question: Where should generator templates live?
Recommendation: Copy into projects (like Ignite)
- Located at
.cli/generators/in each project - Copied during project creation
- Teams can customize per-project
- Version controlled with project
Alternative: Keep in CLI
- Centralized updates
- But harder to customize per-project
Question: How should users configure defaults?
Option A: No global config (Recommended)
- All config via flags or prompts
- Like Ignite
- Simpler to reason about
Option B: Global config file
~/.config/fips-agents/config.yaml- Set defaults once
- But adds complexity
Question: What should the PyPI package be named?
Options:
fips-agents-cli(explicit)fips-agents(shorter)agents-cli(generic)fips-cli(very short)
Recommendation: fips-agents-cli
- Clear what it does
- Namespaced with
fips- - Command can be
fips-agents(without-cli)
- Can create MCP server project from template repo
- Project is fully functional after creation
- Can generate tools within project
- Generated code is valid Python
- Works in both interactive and non-interactive modes
- Zero-installation via pipx
- Clear, helpful error messages
- Progress indicators for long operations
- Works on macOS, Linux, Windows
- < 5 seconds from command to project ready
- ≥80% test coverage
- Integration tests pass
- No linting errors
- Type hints throughout
- Documentation complete
- Technology: Confirm Python (not Node.js)?
- Command structure: Which pattern do you prefer?
- Template strategy: Clone from git vs bundle in CLI?
- Generator location: Copy to project vs keep in CLI?
- Config strategy: No global config vs config file?
- Package name: What should we call it on PyPI?
- Scope: Focus on MVP (create + generate tool) first, or broader?
- Timeline: What's the target for MVP release?
- Testing: Any specific scenarios to test?
- Documentation: What level of docs for MVP?
Once we align on the above decisions:
- Create project structure
- Set up pyproject.toml
- Implement basic CLI framework
- Add create command
- Test with your mcp-server-template
- Iterate based on feedback
# Install once (or use pipx run for zero-install)
pipx install fips-agents-cli
# Create new MCP server
fips-agents create mcp-server weather-service
# 🔍 Using template: mcp-server-template
# 📦 Cloning from https://github.com/rdwj/mcp-server-template
# ✓ Project created: weather-service
#
# Next steps:
# cd weather-service
# python -m venv venv
# source venv/bin/activate # or venv\Scripts\activate on Windows
# pip install -e .
# fips-agents generate tool get_weather
# Navigate into project
cd weather-service
# Set up environment
python -m venv venv
source venv/bin/activate
pip install -e .
# Generate a tool
fips-agents generate tool get_weather
# ✓ Generated tool: get_weather
# ✓ Created: src/weather_service/tools/get_weather.py
# ✓ Created: tests/test_get_weather.py
#
# Next steps:
# 1. Implement tool logic in src/weather_service/tools/get_weather.py
# 2. Register tool in src/weather_service/server.py
# 3. Run tests: pytest tests/test_get_weather.py
# Generate a prompt
fips-agents generate prompt weather_analysis
# ✓ Generated prompt: weather_analysis
# ✓ Created: prompts/weather_analysis.yaml
# Run tests
pytest
# Start the server
python -m weather_service.serverThis plan provides:
- ✅ Clear technology choices (Python + Click + Rich)
- ✅ Command structure options
- ✅ Detailed architecture
- ✅ Phase-by-phase roadmap
- ✅ MVP focus (create + generate)
- ✅ Future expansion path
- ✅ Discussion points for alignment
Ready to discuss and refine before implementation!