#
tokens: 48721/50000 20/1179 files (page 8/21)
lines: off (toggle) GitHub
raw markdown copy
This is page 8 of 21. Use http://codebase.md/sparesparrow/mcp-project-orchestrator?page={x} to view the full context.

# Directory Structure

```
├── .cursorrules
├── .env.example
├── .github
│   └── workflows
│       ├── build.yml
│       ├── ci-cd.yml
│       ├── ci.yml
│       ├── deploy.yml
│       ├── ecosystem-monitor.yml
│       ├── fan-out-orchestrator.yml
│       └── release.yml
├── .gitignore
├── .pre-commit-config.yaml
├── AUTOMOTIVE_CAMERA_SYSTEM_SUMMARY.md
├── automotive-camera-system
│   ├── docs
│   │   └── IMPLEMENTACE_CS.md
│   └── README.md
├── AWS_MCP_IMPLEMENTATION_SUMMARY.md
├── AWS_MCP_QUICKSTART.md
├── AWS_SIP_TRUNK_DEPLOYMENT_COMPLETE.md
├── aws-sip-trunk
│   ├── .gitignore
│   ├── config
│   │   ├── extensions.conf.j2
│   │   └── pjsip.conf.j2
│   ├── DEPLOYMENT_SUMMARY.md
│   ├── docs
│   │   ├── DEPLOYMENT.md
│   │   └── TROUBLESHOOTING.md
│   ├── PROJECT_INDEX.md
│   ├── pyproject.toml
│   ├── QUICKSTART.md
│   ├── README.md
│   ├── scripts
│   │   ├── deploy-asterisk-aws.sh
│   │   └── user-data.sh
│   ├── terraform
│   │   ├── ec2.tf
│   │   ├── main.tf
│   │   ├── monitoring.tf
│   │   ├── networking.tf
│   │   ├── outputs.tf
│   │   ├── storage.tf
│   │   ├── terraform.tfvars.example
│   │   └── variables.tf
│   ├── tests
│   │   └── test_sip_connectivity.py
│   └── VERIFICATION_CHECKLIST.md
├── CLAUDE.md
├── component_templates.json
├── conanfile.py
├── config
│   ├── default.json
│   └── project_orchestration.json
├── Containerfile
├── cursor-templates
│   └── openssl
│       ├── linux-dev.mdc.jinja2
│       └── shared.mdc.jinja2
├── data
│   └── prompts
│       └── templates
│           ├── advanced-multi-server-template.json
│           ├── analysis-assistant.json
│           ├── analyze-mermaid-diagram.json
│           ├── architecture-design-assistant.json
│           ├── code-diagram-documentation-creator.json
│           ├── code-refactoring-assistant.json
│           ├── code-review-assistant.json
│           ├── collaborative-development.json
│           ├── consolidated-interfaces-template.json
│           ├── could-you-interpret-the-assumed-applicat.json
│           ├── data-analysis-template.json
│           ├── database-query-assistant.json
│           ├── debugging-assistant.json
│           ├── development-system-prompt-zcna0.json
│           ├── development-system-prompt.json
│           ├── development-workflow.json
│           ├── docker-compose-prompt-combiner.json
│           ├── docker-containerization-guide.json
│           ├── docker-mcp-servers-orchestration.json
│           ├── foresight-assistant.json
│           ├── generate-different-types-of-questions-ab.json
│           ├── generate-mermaid-diagram.json
│           ├── image-1-describe-the-icon-in-one-sen.json
│           ├── initialize-project-setup-for-a-new-micro.json
│           ├── install-dependencies-build-run-test.json
│           ├── mcp-code-generator.json
│           ├── mcp-integration-assistant.json
│           ├── mcp-resources-explorer.json
│           ├── mcp-resources-integration.json
│           ├── mcp-server-configurator.json
│           ├── mcp-server-dev-prompt-combiner.json
│           ├── mcp-server-integration-template.json
│           ├── mcp-template-system.json
│           ├── mermaid-analysis-expert.json
│           ├── mermaid-class-diagram-generator.json
│           ├── mermaid-diagram-generator.json
│           ├── mermaid-diagram-modifier.json
│           ├── modify-mermaid-diagram.json
│           ├── monorepo-migration-guide.json
│           ├── multi-resource-context.json
│           ├── project-analysis-assistant.json
│           ├── prompt-combiner-interface.json
│           ├── prompt-templates.json
│           ├── repository-explorer.json
│           ├── research-assistant.json
│           ├── sequential-data-analysis.json
│           ├── solid-code-analysis-visualizer.json
│           ├── task-list-helper-8ithy.json
│           ├── template-based-mcp-integration.json
│           ├── templates.json
│           ├── test-prompt.json
│           └── you-are-limited-to-respond-yes-or-no-onl.json
├── docs
│   ├── AWS_MCP.md
│   ├── AWS.md
│   ├── CONAN.md
│   └── integration.md
├── elevenlabs-agents
│   ├── agent-prompts.json
│   └── README.md
├── IMPLEMENTATION_STATUS.md
├── integration_plan.md
├── LICENSE
├── MANIFEST.in
├── mcp-project-orchestrator
│   └── openssl
│       ├── .github
│       │   └── workflows
│       │       └── validate-cursor-config.yml
│       ├── conanfile.py
│       ├── CURSOR_DEPLOYMENT_POLISH.md
│       ├── cursor-rules
│       │   ├── mcp.json.jinja2
│       │   ├── prompts
│       │   │   ├── fips-compliance.md.jinja2
│       │   │   ├── openssl-coding-standards.md.jinja2
│       │   │   └── pr-review.md.jinja2
│       │   └── rules
│       │       ├── ci-linux.mdc.jinja2
│       │       ├── linux-dev.mdc.jinja2
│       │       ├── macos-dev.mdc.jinja2
│       │       ├── shared.mdc.jinja2
│       │       └── windows-dev.mdc.jinja2
│       ├── docs
│       │   └── cursor-configuration-management.md
│       ├── examples
│       │   └── example-workspace
│       │       ├── .cursor
│       │       │   ├── mcp.json
│       │       │   └── rules
│       │       │       ├── linux-dev.mdc
│       │       │       └── shared.mdc
│       │       ├── .gitignore
│       │       ├── CMakeLists.txt
│       │       ├── conanfile.py
│       │       ├── profiles
│       │       │   ├── linux-gcc-debug.profile
│       │       │   └── linux-gcc-release.profile
│       │       ├── README.md
│       │       └── src
│       │           ├── crypto_utils.cpp
│       │           ├── crypto_utils.h
│       │           └── main.cpp
│       ├── IMPLEMENTATION_SUMMARY.md
│       ├── mcp_orchestrator
│       │   ├── __init__.py
│       │   ├── cli.py
│       │   ├── conan_integration.py
│       │   ├── cursor_config.py
│       │   ├── cursor_deployer.py
│       │   ├── deploy_cursor.py
│       │   ├── env_config.py
│       │   ├── platform_detector.py
│       │   └── yaml_validator.py
│       ├── openssl-cursor-example-workspace-20251014_121133.zip
│       ├── pyproject.toml
│       ├── README.md
│       ├── requirements.txt
│       ├── scripts
│       │   └── create_example_workspace.py
│       ├── setup.py
│       ├── test_deployment.py
│       └── tests
│           ├── __init__.py
│           ├── test_cursor_deployer.py
│           └── test_template_validation.py
├── printcast-agent
│   ├── .env.example
│   ├── config
│   │   └── asterisk
│   │       └── extensions.conf
│   ├── Containerfile
│   ├── docker-compose.yml
│   ├── pyproject.toml
│   ├── README.md
│   ├── scripts
│   │   └── docker-entrypoint.sh
│   ├── src
│   │   ├── integrations
│   │   │   ├── __init__.py
│   │   │   ├── asterisk.py
│   │   │   ├── content.py
│   │   │   ├── delivery.py
│   │   │   ├── elevenlabs.py
│   │   │   └── printing.py
│   │   ├── mcp_server
│   │   │   ├── __init__.py
│   │   │   ├── main.py
│   │   │   └── server.py
│   │   └── orchestration
│   │       ├── __init__.py
│   │       └── workflow.py
│   └── tests
│       └── test_mcp_server.py
├── project_orchestration.json
├── project_templates.json
├── pyproject.toml
├── README.md
├── REFACTORING_COMPLETED.md
├── REFACTORING_RECOMMENDATIONS.md
├── requirements.txt
├── scripts
│   ├── archive
│   │   ├── init_claude_test.sh
│   │   ├── init_postgres.sh
│   │   ├── start_mcp_servers.sh
│   │   └── test_claude_desktop.sh
│   ├── consolidate_mermaid.py
│   ├── consolidate_prompts.py
│   ├── consolidate_resources.py
│   ├── consolidate_templates.py
│   ├── INSTRUCTIONS.md
│   ├── README.md
│   ├── setup_aws_mcp.sh
│   ├── setup_mcp.sh
│   ├── setup_orchestrator.sh
│   ├── setup_project.py
│   └── test_mcp.sh
├── src
│   └── mcp_project_orchestrator
│       ├── __init__.py
│       ├── __main__.py
│       ├── aws_mcp.py
│       ├── cli
│       │   └── __init__.py
│       ├── cli.py
│       ├── commands
│       │   └── openssl_cli.py
│       ├── core
│       │   ├── __init__.py
│       │   ├── base.py
│       │   ├── config.py
│       │   ├── exceptions.py
│       │   ├── fastmcp.py
│       │   ├── logging.py
│       │   └── managers.py
│       ├── cursor_deployer.py
│       ├── ecosystem_monitor.py
│       ├── fan_out_orchestrator.py
│       ├── fastmcp.py
│       ├── mcp-py
│       │   ├── AggregateVersions.py
│       │   ├── CustomBashTool.py
│       │   ├── FileAnnotator.py
│       │   ├── mcp-client.py
│       │   ├── mcp-server.py
│       │   ├── MermaidDiagramGenerator.py
│       │   ├── NamingAgent.py
│       │   └── solid-analyzer-agent.py
│       ├── mermaid
│       │   ├── __init__.py
│       │   ├── generator.py
│       │   ├── mermaid_orchestrator.py
│       │   ├── renderer.py
│       │   ├── templates
│       │   │   ├── AbstractFactory-diagram.json
│       │   │   ├── Adapter-diagram.json
│       │   │   ├── Analyze_Mermaid_Diagram.json
│       │   │   ├── Builder-diagram.json
│       │   │   ├── Chain-diagram.json
│       │   │   ├── Code_Diagram_Documentation_Creator.json
│       │   │   ├── Command-diagram.json
│       │   │   ├── Decorator-diagram.json
│       │   │   ├── Facade-diagram.json
│       │   │   ├── Factory-diagram.json
│       │   │   ├── flowchart
│       │   │   │   ├── AbstractFactory-diagram.json
│       │   │   │   ├── Adapter-diagram.json
│       │   │   │   ├── Analyze_Mermaid_Diagram.json
│       │   │   │   ├── Builder-diagram.json
│       │   │   │   ├── Chain-diagram.json
│       │   │   │   ├── Code_Diagram_Documentation_Creator.json
│       │   │   │   ├── Command-diagram.json
│       │   │   │   ├── Decorator-diagram.json
│       │   │   │   ├── Facade-diagram.json
│       │   │   │   ├── Factory-diagram.json
│       │   │   │   ├── Generate_Mermaid_Diagram.json
│       │   │   │   ├── generated_diagram.json
│       │   │   │   ├── integration.json
│       │   │   │   ├── Iterator-diagram.json
│       │   │   │   ├── Mediator-diagram.json
│       │   │   │   ├── Memento-diagram.json
│       │   │   │   ├── Mermaid_Analysis_Expert.json
│       │   │   │   ├── Mermaid_Class_Diagram_Generator.json
│       │   │   │   ├── Mermaid_Diagram_Generator.json
│       │   │   │   ├── Mermaid_Diagram_Modifier.json
│       │   │   │   ├── Modify_Mermaid_Diagram.json
│       │   │   │   ├── Observer-diagram.json
│       │   │   │   ├── Prototype-diagram.json
│       │   │   │   ├── Proxy-diagram.json
│       │   │   │   ├── README.json
│       │   │   │   ├── Singleton-diagram.json
│       │   │   │   ├── State-diagram.json
│       │   │   │   ├── Strategy-diagram.json
│       │   │   │   ├── TemplateMethod-diagram.json
│       │   │   │   ├── theme_dark.json
│       │   │   │   ├── theme_default.json
│       │   │   │   ├── theme_pastel.json
│       │   │   │   ├── theme_vibrant.json
│       │   │   │   └── Visitor-diagram.json
│       │   │   ├── Generate_Mermaid_Diagram.json
│       │   │   ├── generated_diagram.json
│       │   │   ├── index.json
│       │   │   ├── integration.json
│       │   │   ├── Iterator-diagram.json
│       │   │   ├── Mediator-diagram.json
│       │   │   ├── Memento-diagram.json
│       │   │   ├── Mermaid_Analysis_Expert.json
│       │   │   ├── Mermaid_Class_Diagram_Generator.json
│       │   │   ├── Mermaid_Diagram_Generator.json
│       │   │   ├── Mermaid_Diagram_Modifier.json
│       │   │   ├── Modify_Mermaid_Diagram.json
│       │   │   ├── Observer-diagram.json
│       │   │   ├── Prototype-diagram.json
│       │   │   ├── Proxy-diagram.json
│       │   │   ├── README.json
│       │   │   ├── Singleton-diagram.json
│       │   │   ├── State-diagram.json
│       │   │   ├── Strategy-diagram.json
│       │   │   ├── TemplateMethod-diagram.json
│       │   │   ├── theme_dark.json
│       │   │   ├── theme_default.json
│       │   │   ├── theme_pastel.json
│       │   │   ├── theme_vibrant.json
│       │   │   └── Visitor-diagram.json
│       │   └── types.py
│       ├── project_orchestration.py
│       ├── prompt_manager
│       │   ├── __init__.py
│       │   ├── loader.py
│       │   ├── manager.py
│       │   └── template.py
│       ├── prompts
│       │   ├── __dirname.json
│       │   ├── __image_1___describe_the_icon_in_one_sen___.json
│       │   ├── __init__.py
│       │   ├── __type.json
│       │   ├── _.json
│       │   ├── _DEFAULT_OPEN_DELIMITER.json
│       │   ├── _emojiRegex.json
│       │   ├── _UUID_CHARS.json
│       │   ├── a.json
│       │   ├── A.json
│       │   ├── Aa.json
│       │   ├── aAnnotationPadding.json
│       │   ├── absoluteThresholdGroup.json
│       │   ├── add.json
│       │   ├── ADDITIONAL_PROPERTY_FLAG.json
│       │   ├── Advanced_Multi-Server_Integration_Template.json
│       │   ├── allOptionsList.json
│       │   ├── analysis
│       │   │   ├── Data_Analysis_Template.json
│       │   │   ├── index.json
│       │   │   ├── Mermaid_Analysis_Expert.json
│       │   │   ├── Sequential_Data_Analysis_with_MCP_Integration.json
│       │   │   └── SOLID_Code_Analysis_Visualizer.json
│       │   ├── Analysis_Assistant.json
│       │   ├── Analyze_Mermaid_Diagram.json
│       │   ├── ANDROID_EVERGREEN_FIRST.json
│       │   ├── ANSI_ESCAPE_BELL.json
│       │   ├── architecture
│       │   │   ├── index.json
│       │   │   └── PromptCombiner_Interface.json
│       │   ├── Architecture_Design_Assistant.json
│       │   ├── argsTag.json
│       │   ├── ARROW.json
│       │   ├── assistant
│       │   │   ├── Analysis_Assistant.json
│       │   │   ├── Architecture_Design_Assistant.json
│       │   │   ├── Code_Refactoring_Assistant.json
│       │   │   ├── Code_Review_Assistant.json
│       │   │   ├── Database_Query_Assistant.json
│       │   │   ├── Debugging_Assistant.json
│       │   │   ├── Foresight_Assistant.json
│       │   │   ├── index.json
│       │   │   ├── MCP_Integration_Assistant.json
│       │   │   ├── Project_Analysis_Assistant.json
│       │   │   └── Research_Assistant.json
│       │   ├── astralRange.json
│       │   ├── at.json
│       │   ├── authorization_endpoint.json
│       │   ├── b.json
│       │   ├── BABELIGNORE_FILENAME.json
│       │   ├── BACKSLASH.json
│       │   ├── backupId.json
│       │   ├── BANG.json
│       │   ├── BASE64_MAP.json
│       │   ├── baseFlags.json
│       │   ├── Basic_Template.json
│       │   ├── bgModel.json
│       │   ├── bignum.json
│       │   ├── blockKeywordsStr.json
│       │   ├── BOMChar.json
│       │   ├── boundary.json
│       │   ├── brackets.json
│       │   ├── BROWSER_VAR.json
│       │   ├── bt.json
│       │   ├── BUILTIN.json
│       │   ├── BULLET.json
│       │   ├── c.json
│       │   ├── C.json
│       │   ├── CACHE_VERSION.json
│       │   ├── cacheControl.json
│       │   ├── cacheProp.json
│       │   ├── category.py
│       │   ├── CHANGE_EVENT.json
│       │   ├── CHAR_CODE_0.json
│       │   ├── chars.json
│       │   ├── cjsPattern.json
│       │   ├── cKeywords.json
│       │   ├── classForPercent.json
│       │   ├── classStr.json
│       │   ├── clientFirstMessageBare.json
│       │   ├── cmd.json
│       │   ├── Code_Diagram_Documentation_Creator.json
│       │   ├── Code_Refactoring_Assistant.json
│       │   ├── Code_Review_Assistant.json
│       │   ├── code.json
│       │   ├── coding
│       │   │   ├── __dirname.json
│       │   │   ├── _.json
│       │   │   ├── _DEFAULT_OPEN_DELIMITER.json
│       │   │   ├── _emojiRegex.json
│       │   │   ├── _UUID_CHARS.json
│       │   │   ├── a.json
│       │   │   ├── A.json
│       │   │   ├── aAnnotationPadding.json
│       │   │   ├── absoluteThresholdGroup.json
│       │   │   ├── add.json
│       │   │   ├── ADDITIONAL_PROPERTY_FLAG.json
│       │   │   ├── allOptionsList.json
│       │   │   ├── ANDROID_EVERGREEN_FIRST.json
│       │   │   ├── ANSI_ESCAPE_BELL.json
│       │   │   ├── argsTag.json
│       │   │   ├── ARROW.json
│       │   │   ├── astralRange.json
│       │   │   ├── at.json
│       │   │   ├── authorization_endpoint.json
│       │   │   ├── BABELIGNORE_FILENAME.json
│       │   │   ├── BACKSLASH.json
│       │   │   ├── BANG.json
│       │   │   ├── BASE64_MAP.json
│       │   │   ├── baseFlags.json
│       │   │   ├── bgModel.json
│       │   │   ├── bignum.json
│       │   │   ├── blockKeywordsStr.json
│       │   │   ├── BOMChar.json
│       │   │   ├── boundary.json
│       │   │   ├── brackets.json
│       │   │   ├── BROWSER_VAR.json
│       │   │   ├── bt.json
│       │   │   ├── BUILTIN.json
│       │   │   ├── BULLET.json
│       │   │   ├── c.json
│       │   │   ├── C.json
│       │   │   ├── CACHE_VERSION.json
│       │   │   ├── cacheControl.json
│       │   │   ├── cacheProp.json
│       │   │   ├── CHANGE_EVENT.json
│       │   │   ├── CHAR_CODE_0.json
│       │   │   ├── chars.json
│       │   │   ├── cjsPattern.json
│       │   │   ├── cKeywords.json
│       │   │   ├── classForPercent.json
│       │   │   ├── classStr.json
│       │   │   ├── clientFirstMessageBare.json
│       │   │   ├── cmd.json
│       │   │   ├── code.json
│       │   │   ├── colorCode.json
│       │   │   ├── comma.json
│       │   │   ├── command.json
│       │   │   ├── configJsContent.json
│       │   │   ├── connectionString.json
│       │   │   ├── cssClassStr.json
│       │   │   ├── currentBoundaryParse.json
│       │   │   ├── d.json
│       │   │   ├── data.json
│       │   │   ├── DATA.json
│       │   │   ├── dataWebpackPrefix.json
│       │   │   ├── debug.json
│       │   │   ├── decodeStateVectorV2.json
│       │   │   ├── DEFAULT_DELIMITER.json
│       │   │   ├── DEFAULT_DIAGRAM_DIRECTION.json
│       │   │   ├── DEFAULT_JS_PATTERN.json
│       │   │   ├── DEFAULT_LOG_TARGET.json
│       │   │   ├── defaultHelpOpt.json
│       │   │   ├── defaultHost.json
│       │   │   ├── deferY18nLookupPrefix.json
│       │   │   ├── DELIM.json
│       │   │   ├── delimiter.json
│       │   │   ├── DEPRECATION.json
│       │   │   ├── destMain.json
│       │   │   ├── DID_NOT_THROW.json
│       │   │   ├── direction.json
│       │   │   ├── displayValue.json
│       │   │   ├── DNS.json
│       │   │   ├── doc.json
│       │   │   ├── DOCUMENTATION_NOTE.json
│       │   │   ├── DOT.json
│       │   │   ├── DOTS.json
│       │   │   ├── dummyCompoundId.json
│       │   │   ├── e.json
│       │   │   ├── E.json
│       │   │   ├── earlyHintsLink.json
│       │   │   ├── elide.json
│       │   │   ├── EMPTY.json
│       │   │   ├── end.json
│       │   │   ├── endpoint.json
│       │   │   ├── environment.json
│       │   │   ├── ERR_CODE.json
│       │   │   ├── errMessage.json
│       │   │   ├── errMsg.json
│       │   │   ├── ERROR_MESSAGE.json
│       │   │   ├── error.json
│       │   │   ├── ERROR.json
│       │   │   ├── ERRORCLASS.json
│       │   │   ├── errorMessage.json
│       │   │   ├── es6Default.json
│       │   │   ├── ESC.json
│       │   │   ├── Escapable.json
│       │   │   ├── escapedChar.json
│       │   │   ├── escapeFuncStr.json
│       │   │   ├── escSlash.json
│       │   │   ├── ev.json
│       │   │   ├── event.json
│       │   │   ├── execaMessage.json
│       │   │   ├── EXPECTED_LABEL.json
│       │   │   ├── expected.json
│       │   │   ├── expectedString.json
│       │   │   ├── expression1.json
│       │   │   ├── EXTENSION.json
│       │   │   ├── f.json
│       │   │   ├── FAIL_TEXT.json
│       │   │   ├── FILE_BROWSER_FACTORY.json
│       │   │   ├── fill.json
│       │   │   ├── findPackageJson.json
│       │   │   ├── fnKey.json
│       │   │   ├── FORMAT.json
│       │   │   ├── formatted.json
│       │   │   ├── from.json
│       │   │   ├── fullpaths.json
│       │   │   ├── FUNC_ERROR_TEXT.json
│       │   │   ├── GenStateSuspendedStart.json
│       │   │   ├── GENSYNC_EXPECTED_START.json
│       │   │   ├── gutter.json
│       │   │   ├── h.json
│       │   │   ├── handlerFuncName.json
│       │   │   ├── HASH_UNDEFINED.json
│       │   │   ├── head.json
│       │   │   ├── helpMessage.json
│       │   │   ├── HINT_ARG.json
│       │   │   ├── HOOK_RETURNED_NOTHING_ERROR_MESSAGE.json
│       │   │   ├── i.json
│       │   │   ├── id.json
│       │   │   ├── identifier.json
│       │   │   ├── Identifier.json
│       │   │   ├── INDENT.json
│       │   │   ├── indentation.json
│       │   │   ├── index.json
│       │   │   ├── INDIRECTION_FRAGMENT.json
│       │   │   ├── input.json
│       │   │   ├── inputText.json
│       │   │   ├── insert.json
│       │   │   ├── insertPromptQuery.json
│       │   │   ├── INSPECT_MAX_BYTES.json
│       │   │   ├── intToCharMap.json
│       │   │   ├── IS_ITERABLE_SENTINEL.json
│       │   │   ├── IS_KEYED_SENTINEL.json
│       │   │   ├── isConfigType.json
│       │   │   ├── isoSentinel.json
│       │   │   ├── isSourceNode.json
│       │   │   ├── j.json
│       │   │   ├── JAKE_CMD.json
│       │   │   ├── JEST_GLOBAL_NAME.json
│       │   │   ├── JEST_GLOBALS_MODULE_NAME.json
│       │   │   ├── JSON_SYNTAX_CHAR.json
│       │   │   ├── json.json
│       │   │   ├── jsonType.json
│       │   │   ├── jupyter_namespaceObject.json
│       │   │   ├── JUPYTERLAB_DOCMANAGER_PLUGIN_ID.json
│       │   │   ├── k.json
│       │   │   ├── KERNEL_STATUS_ERROR_CLASS.json
│       │   │   ├── key.json
│       │   │   ├── l.json
│       │   │   ├── labelId.json
│       │   │   ├── LATEST_PROTOCOL_VERSION.json
│       │   │   ├── LETTERDASHNUMBER.json
│       │   │   ├── LF.json
│       │   │   ├── LIMIT_REPLACE_NODE.json
│       │   │   ├── logTime.json
│       │   │   ├── lstatkey.json
│       │   │   ├── lt.json
│       │   │   ├── m.json
│       │   │   ├── maliciousPayload.json
│       │   │   ├── mask.json
│       │   │   ├── match.json
│       │   │   ├── matchingDelim.json
│       │   │   ├── MAXIMUM_MESSAGE_SIZE.json
│       │   │   ├── mdcContent.json
│       │   │   ├── MERMAID_DOM_ID_PREFIX.json
│       │   │   ├── message.json
│       │   │   ├── messages.json
│       │   │   ├── meth.json
│       │   │   ├── minimatch.json
│       │   │   ├── MOCK_CONSTRUCTOR_NAME.json
│       │   │   ├── MOCKS_PATTERN.json
│       │   │   ├── moduleDirectory.json
│       │   │   ├── msg.json
│       │   │   ├── mtr.json
│       │   │   ├── multipartType.json
│       │   │   ├── n.json
│       │   │   ├── N.json
│       │   │   ├── name.json
│       │   │   ├── NATIVE_PLATFORM.json
│       │   │   ├── newUrl.json
│       │   │   ├── NM.json
│       │   │   ├── NO_ARGUMENTS.json
│       │   │   ├── NO_DIFF_MESSAGE.json
│       │   │   ├── NODE_MODULES.json
│       │   │   ├── nodeInternalPrefix.json
│       │   │   ├── nonASCIIidentifierStartChars.json
│       │   │   ├── nonKey.json
│       │   │   ├── NOT_A_DOT.json
│       │   │   ├── notCharacterOrDash.json
│       │   │   ├── notebookURL.json
│       │   │   ├── notSelector.json
│       │   │   ├── nullTag.json
│       │   │   ├── num.json
│       │   │   ├── NUMBER.json
│       │   │   ├── o.json
│       │   │   ├── O.json
│       │   │   ├── octChar.json
│       │   │   ├── octetStreamType.json
│       │   │   ├── operators.json
│       │   │   ├── out.json
│       │   │   ├── OUTSIDE_JEST_VM_PROTOCOL.json
│       │   │   ├── override.json
│       │   │   ├── p.json
│       │   │   ├── PACKAGE_FILENAME.json
│       │   │   ├── PACKAGE_JSON.json
│       │   │   ├── packageVersion.json
│       │   │   ├── paddedNumber.json
│       │   │   ├── page.json
│       │   │   ├── parseClass.json
│       │   │   ├── path.json
│       │   │   ├── pathExt.json
│       │   │   ├── pattern.json
│       │   │   ├── PatternBoolean.json
│       │   │   ├── pBuiltins.json
│       │   │   ├── pFloatForm.json
│       │   │   ├── pkg.json
│       │   │   ├── PLUGIN_ID_DOC_MANAGER.json
│       │   │   ├── plusChar.json
│       │   │   ├── PN_CHARS.json
│       │   │   ├── point.json
│       │   │   ├── prefix.json
│       │   │   ├── PRETTY_PLACEHOLDER.json
│       │   │   ├── property_prefix.json
│       │   │   ├── pubkey256.json
│       │   │   ├── Q.json
│       │   │   ├── qmark.json
│       │   │   ├── QO.json
│       │   │   ├── query.json
│       │   │   ├── querystringType.json
│       │   │   ├── queryText.json
│       │   │   ├── r.json
│       │   │   ├── R.json
│       │   │   ├── rangeStart.json
│       │   │   ├── re.json
│       │   │   ├── reI.json
│       │   │   ├── REQUIRED_FIELD_SYMBOL.json
│       │   │   ├── reserve.json
│       │   │   ├── resolvedDestination.json
│       │   │   ├── resolverDir.json
│       │   │   ├── responseType.json
│       │   │   ├── result.json
│       │   │   ├── ROOT_DESCRIBE_BLOCK_NAME.json
│       │   │   ├── ROOT_NAMESPACE_NAME.json
│       │   │   ├── ROOT_TASK_NAME.json
│       │   │   ├── route.json
│       │   │   ├── RUNNING_TEXT.json
│       │   │   ├── s.json
│       │   │   ├── SCHEMA_PATH.json
│       │   │   ├── se.json
│       │   │   ├── SEARCHABLE_CLASS.json
│       │   │   ├── secret.json
│       │   │   ├── selector.json
│       │   │   ├── SEMVER_SPEC_VERSION.json
│       │   │   ├── sensitiveHeaders.json
│       │   │   ├── sep.json
│       │   │   ├── separator.json
│       │   │   ├── SHAPE_STATE.json
│       │   │   ├── shape.json
│       │   │   ├── SHARED.json
│       │   │   ├── short.json
│       │   │   ├── side.json
│       │   │   ├── SNAPSHOT_VERSION.json
│       │   │   ├── SOURCE_MAPPING_PREFIX.json
│       │   │   ├── source.json
│       │   │   ├── sourceMapContent.json
│       │   │   ├── SPACE_SYMBOL.json
│       │   │   ├── SPACE.json
│       │   │   ├── sqlKeywords.json
│       │   │   ├── sranges.json
│       │   │   ├── st.json
│       │   │   ├── ST.json
│       │   │   ├── stack.json
│       │   │   ├── START_HIDING.json
│       │   │   ├── START_OF_LINE.json
│       │   │   ├── startNoTraversal.json
│       │   │   ├── STATES.json
│       │   │   ├── stats.json
│       │   │   ├── statSync.json
│       │   │   ├── storageStatus.json
│       │   │   ├── storageType.json
│       │   │   ├── str.json
│       │   │   ├── stringifiedObject.json
│       │   │   ├── stringPath.json
│       │   │   ├── stringResult.json
│       │   │   ├── stringTag.json
│       │   │   ├── strValue.json
│       │   │   ├── style.json
│       │   │   ├── SUB_NAME.json
│       │   │   ├── subkey.json
│       │   │   ├── SUBPROTOCOL.json
│       │   │   ├── SUITE_NAME.json
│       │   │   ├── symbolPattern.json
│       │   │   ├── symbolTag.json
│       │   │   ├── t.json
│       │   │   ├── T.json
│       │   │   ├── templateDir.json
│       │   │   ├── tempName.json
│       │   │   ├── text.json
│       │   │   ├── time.json
│       │   │   ├── titleSeparator.json
│       │   │   ├── tmpl.json
│       │   │   ├── tn.json
│       │   │   ├── toValue.json
│       │   │   ├── transform.json
│       │   │   ├── trustProxyDefaultSymbol.json
│       │   │   ├── typeArgumentsKey.json
│       │   │   ├── typeKey.json
│       │   │   ├── typeMessage.json
│       │   │   ├── typesRegistryPackageName.json
│       │   │   ├── u.json
│       │   │   ├── UNDEFINED.json
│       │   │   ├── unit.json
│       │   │   ├── UNMATCHED_SURROGATE_PAIR_REPLACE.json
│       │   │   ├── ur.json
│       │   │   ├── USAGE.json
│       │   │   ├── value.json
│       │   │   ├── Vr.json
│       │   │   ├── watchmanURL.json
│       │   │   ├── webkit.json
│       │   │   ├── xhtml.json
│       │   │   ├── XP_DEFAULT_PATHEXT.json
│       │   │   └── y.json
│       │   ├── Collaborative_Development_with_MCP_Integration.json
│       │   ├── colorCode.json
│       │   ├── comma.json
│       │   ├── command.json
│       │   ├── completionShTemplate.json
│       │   ├── configJsContent.json
│       │   ├── connectionString.json
│       │   ├── Consolidated_TypeScript_Interfaces_Template.json
│       │   ├── Could_you_interpret_the_assumed_applicat___.json
│       │   ├── cssClassStr.json
│       │   ├── currentBoundaryParse.json
│       │   ├── d.json
│       │   ├── Data_Analysis_Template.json
│       │   ├── data.json
│       │   ├── DATA.json
│       │   ├── Database_Query_Assistant.json
│       │   ├── dataWebpackPrefix.json
│       │   ├── debug.json
│       │   ├── Debugging_Assistant.json
│       │   ├── decodeStateVectorV2.json
│       │   ├── DEFAULT_DELIMITER.json
│       │   ├── DEFAULT_DIAGRAM_DIRECTION.json
│       │   ├── DEFAULT_INDENT.json
│       │   ├── DEFAULT_JS_PATTERN.json
│       │   ├── DEFAULT_LOG_TARGET.json
│       │   ├── defaultHelpOpt.json
│       │   ├── defaultHost.json
│       │   ├── deferY18nLookupPrefix.json
│       │   ├── DELIM.json
│       │   ├── delimiter.json
│       │   ├── DEPRECATION.json
│       │   ├── DESCENDING.json
│       │   ├── destMain.json
│       │   ├── development
│       │   │   ├── Collaborative_Development_with_MCP_Integration.json
│       │   │   ├── Consolidated_TypeScript_Interfaces_Template.json
│       │   │   ├── Development_Workflow.json
│       │   │   ├── index.json
│       │   │   ├── MCP_Server_Development_Prompt_Combiner.json
│       │   │   └── Monorepo_Migration_and_Code_Organization_Guide.json
│       │   ├── Development_System_Prompt.json
│       │   ├── Development_Workflow.json
│       │   ├── devops
│       │   │   ├── Docker_Compose_Prompt_Combiner.json
│       │   │   ├── Docker_Containerization_Guide.json
│       │   │   └── index.json
│       │   ├── DID_NOT_THROW.json
│       │   ├── direction.json
│       │   ├── displayValue.json
│       │   ├── DNS.json
│       │   ├── doc.json
│       │   ├── Docker_Compose_Prompt_Combiner.json
│       │   ├── Docker_Containerization_Guide.json
│       │   ├── Docker_MCP_Servers_Orchestration_Guide.json
│       │   ├── DOCUMENTATION_NOTE.json
│       │   ├── DOT.json
│       │   ├── DOTS.json
│       │   ├── dummyCompoundId.json
│       │   ├── e.json
│       │   ├── E.json
│       │   ├── earlyHintsLink.json
│       │   ├── elide.json
│       │   ├── EMPTY.json
│       │   ├── encoded.json
│       │   ├── end.json
│       │   ├── endpoint.json
│       │   ├── environment.json
│       │   ├── ERR_CODE.json
│       │   ├── errMessage.json
│       │   ├── errMsg.json
│       │   ├── ERROR_MESSAGE.json
│       │   ├── error.json
│       │   ├── ERROR.json
│       │   ├── ERRORCLASS.json
│       │   ├── errorMessage.json
│       │   ├── es6Default.json
│       │   ├── ESC.json
│       │   ├── Escapable.json
│       │   ├── escapedChar.json
│       │   ├── escapeFuncStr.json
│       │   ├── escSlash.json
│       │   ├── ev.json
│       │   ├── event.json
│       │   ├── execaMessage.json
│       │   ├── EXPECTED_LABEL.json
│       │   ├── expected.json
│       │   ├── expectedString.json
│       │   ├── expression1.json
│       │   ├── EXTENSION.json
│       │   ├── f.json
│       │   ├── FAIL_TEXT.json
│       │   ├── FILE_BROWSER_FACTORY.json
│       │   ├── fill.json
│       │   ├── findPackageJson.json
│       │   ├── fnKey.json
│       │   ├── Foresight_Assistant.json
│       │   ├── FORMAT.json
│       │   ├── formatted.json
│       │   ├── from.json
│       │   ├── fullpaths.json
│       │   ├── FUNC_ERROR_TEXT.json
│       │   ├── general
│       │   │   └── index.json
│       │   ├── Generate_different_types_of_questions_ab___.json
│       │   ├── Generate_Mermaid_Diagram.json
│       │   ├── GenStateSuspendedStart.json
│       │   ├── GENSYNC_EXPECTED_START.json
│       │   ├── GitHub_Repository_Explorer.json
│       │   ├── gutter.json
│       │   ├── h.json
│       │   ├── handlerFuncName.json
│       │   ├── HASH_UNDEFINED.json
│       │   ├── head.json
│       │   ├── helpMessage.json
│       │   ├── HINT_ARG.json
│       │   ├── HOOK_RETURNED_NOTHING_ERROR_MESSAGE.json
│       │   ├── i.json
│       │   ├── id.json
│       │   ├── identifier.json
│       │   ├── Identifier.json
│       │   ├── INDENT.json
│       │   ├── indentation.json
│       │   ├── index.json
│       │   ├── INDIRECTION_FRAGMENT.json
│       │   ├── Initialize_project_setup_for_a_new_micro___.json
│       │   ├── input.json
│       │   ├── inputText.json
│       │   ├── insert.json
│       │   ├── insertPromptQuery.json
│       │   ├── INSPECT_MAX_BYTES.json
│       │   ├── install_dependencies__build__run__test____.json
│       │   ├── intToCharMap.json
│       │   ├── IS_ITERABLE_SENTINEL.json
│       │   ├── IS_KEYED_SENTINEL.json
│       │   ├── isConfigType.json
│       │   ├── isoSentinel.json
│       │   ├── isSourceNode.json
│       │   ├── j.json
│       │   ├── J.json
│       │   ├── JAKE_CMD.json
│       │   ├── JEST_GLOBAL_NAME.json
│       │   ├── JEST_GLOBALS_MODULE_NAME.json
│       │   ├── JSON_SYNTAX_CHAR.json
│       │   ├── json.json
│       │   ├── jsonType.json
│       │   ├── jupyter_namespaceObject.json
│       │   ├── JUPYTERLAB_DOCMANAGER_PLUGIN_ID.json
│       │   ├── k.json
│       │   ├── KERNEL_STATUS_ERROR_CLASS.json
│       │   ├── key.json
│       │   ├── l.json
│       │   ├── labelId.json
│       │   ├── LATEST_PROTOCOL_VERSION.json
│       │   ├── LETTERDASHNUMBER.json
│       │   ├── LF.json
│       │   ├── LIMIT_REPLACE_NODE.json
│       │   ├── LINE_FEED.json
│       │   ├── logTime.json
│       │   ├── lstatkey.json
│       │   ├── lt.json
│       │   ├── m.json
│       │   ├── maliciousPayload.json
│       │   ├── manager.py
│       │   ├── marker.json
│       │   ├── mask.json
│       │   ├── match.json
│       │   ├── matchingDelim.json
│       │   ├── MAXIMUM_MESSAGE_SIZE.json
│       │   ├── MCP_Integration_Assistant.json
│       │   ├── MCP_Resources_Explorer.json
│       │   ├── MCP_Resources_Integration_Guide.json
│       │   ├── MCP_Server_Development_Prompt_Combiner.json
│       │   ├── MCP_Server_Integration_Guide.json
│       │   ├── mcp-code-generator.json
│       │   ├── mdcContent.json
│       │   ├── Mermaid_Analysis_Expert.json
│       │   ├── Mermaid_Class_Diagram_Generator.json
│       │   ├── Mermaid_Diagram_Generator.json
│       │   ├── Mermaid_Diagram_Modifier.json
│       │   ├── MERMAID_DOM_ID_PREFIX.json
│       │   ├── message.json
│       │   ├── messages.json
│       │   ├── meth.json
│       │   ├── minimatch.json
│       │   ├── MOBILE_QUERY.json
│       │   ├── MOCK_CONSTRUCTOR_NAME.json
│       │   ├── MOCKS_PATTERN.json
│       │   ├── Modify_Mermaid_Diagram.json
│       │   ├── moduleDirectory.json
│       │   ├── Monorepo_Migration_and_Code_Organization_Guide.json
│       │   ├── msg.json
│       │   ├── mtr.json
│       │   ├── Multi-Resource_Context_Assistant.json
│       │   ├── multipartType.json
│       │   ├── n.json
│       │   ├── N.json
│       │   ├── name.json
│       │   ├── NATIVE_PLATFORM.json
│       │   ├── newUrl.json
│       │   ├── NM.json
│       │   ├── NO_ARGUMENTS.json
│       │   ├── NO_DIFF_MESSAGE.json
│       │   ├── NODE_MODULES.json
│       │   ├── nodeInternalPrefix.json
│       │   ├── nonASCIIidentifierStartChars.json
│       │   ├── nonKey.json
│       │   ├── NOT_A_DOT.json
│       │   ├── notCharacterOrDash.json
│       │   ├── notebookURL.json
│       │   ├── notSelector.json
│       │   ├── nullTag.json
│       │   ├── num.json
│       │   ├── NUMBER.json
│       │   ├── o.json
│       │   ├── O.json
│       │   ├── octChar.json
│       │   ├── octetStreamType.json
│       │   ├── operators.json
│       │   ├── other
│       │   │   ├── __image_1___describe_the_icon_in_one_sen___.json
│       │   │   ├── __type.json
│       │   │   ├── Advanced_Multi-Server_Integration_Template.json
│       │   │   ├── Analyze_Mermaid_Diagram.json
│       │   │   ├── Basic_Template.json
│       │   │   ├── Code_Diagram_Documentation_Creator.json
│       │   │   ├── Collaborative_Development_with_MCP_Integration.json
│       │   │   ├── completionShTemplate.json
│       │   │   ├── Could_you_interpret_the_assumed_applicat___.json
│       │   │   ├── DEFAULT_INDENT.json
│       │   │   ├── Docker_MCP_Servers_Orchestration_Guide.json
│       │   │   ├── Generate_different_types_of_questions_ab___.json
│       │   │   ├── Generate_Mermaid_Diagram.json
│       │   │   ├── GitHub_Repository_Explorer.json
│       │   │   ├── index.json
│       │   │   ├── Initialize_project_setup_for_a_new_micro___.json
│       │   │   ├── install_dependencies__build__run__test____.json
│       │   │   ├── LINE_FEED.json
│       │   │   ├── MCP_Resources_Explorer.json
│       │   │   ├── MCP_Resources_Integration_Guide.json
│       │   │   ├── MCP_Server_Integration_Guide.json
│       │   │   ├── mcp-code-generator.json
│       │   │   ├── Mermaid_Class_Diagram_Generator.json
│       │   │   ├── Mermaid_Diagram_Generator.json
│       │   │   ├── Mermaid_Diagram_Modifier.json
│       │   │   ├── Modify_Mermaid_Diagram.json
│       │   │   ├── Multi-Resource_Context_Assistant.json
│       │   │   ├── output.json
│       │   │   ├── sseUrl.json
│       │   │   ├── string.json
│       │   │   ├── Task_List_Helper.json
│       │   │   ├── Template-Based_MCP_Integration.json
│       │   │   ├── Test_Prompt.json
│       │   │   ├── type.json
│       │   │   ├── VERSION.json
│       │   │   ├── WIN_SLASH.json
│       │   │   └── You_are_limited_to_respond_Yes_or_No_onl___.json
│       │   ├── out.json
│       │   ├── output.json
│       │   ├── OUTSIDE_JEST_VM_PROTOCOL.json
│       │   ├── override.json
│       │   ├── p.json
│       │   ├── PACKAGE_FILENAME.json
│       │   ├── PACKAGE_JSON.json
│       │   ├── packageVersion.json
│       │   ├── paddedNumber.json
│       │   ├── page.json
│       │   ├── parseClass.json
│       │   ├── PATH_NODE_MODULES.json
│       │   ├── path.json
│       │   ├── pathExt.json
│       │   ├── pattern.json
│       │   ├── PatternBoolean.json
│       │   ├── pBuiltins.json
│       │   ├── pFloatForm.json
│       │   ├── pkg.json
│       │   ├── PLUGIN_ID_DOC_MANAGER.json
│       │   ├── plusChar.json
│       │   ├── PN_CHARS.json
│       │   ├── point.json
│       │   ├── prefix.json
│       │   ├── PRETTY_PLACEHOLDER.json
│       │   ├── Project_Analysis_Assistant.json
│       │   ├── ProjectsUpdatedInBackgroundEvent.json
│       │   ├── PromptCombiner_Interface.json
│       │   ├── promptId.json
│       │   ├── property_prefix.json
│       │   ├── pubkey256.json
│       │   ├── Q.json
│       │   ├── qmark.json
│       │   ├── QO.json
│       │   ├── query.json
│       │   ├── querystringType.json
│       │   ├── queryText.json
│       │   ├── r.json
│       │   ├── R.json
│       │   ├── rangeStart.json
│       │   ├── re.json
│       │   ├── reI.json
│       │   ├── REQUIRED_FIELD_SYMBOL.json
│       │   ├── Research_Assistant.json
│       │   ├── reserve.json
│       │   ├── resolvedDestination.json
│       │   ├── resolverDir.json
│       │   ├── responseType.json
│       │   ├── result.json
│       │   ├── ROOT_DESCRIBE_BLOCK_NAME.json
│       │   ├── ROOT_NAMESPACE_NAME.json
│       │   ├── ROOT_TASK_NAME.json
│       │   ├── route.json
│       │   ├── RUNNING_TEXT.json
│       │   ├── RXstyle.json
│       │   ├── s.json
│       │   ├── SCHEMA_PATH.json
│       │   ├── schemaQuery.json
│       │   ├── se.json
│       │   ├── SEARCHABLE_CLASS.json
│       │   ├── secret.json
│       │   ├── selector.json
│       │   ├── SEMVER_SPEC_VERSION.json
│       │   ├── sensitiveHeaders.json
│       │   ├── sep.json
│       │   ├── separator.json
│       │   ├── Sequential_Data_Analysis_with_MCP_Integration.json
│       │   ├── SHAPE_STATE.json
│       │   ├── shape.json
│       │   ├── SHARED.json
│       │   ├── short.json
│       │   ├── side.json
│       │   ├── SNAPSHOT_VERSION.json
│       │   ├── SOLID_Code_Analysis_Visualizer.json
│       │   ├── SOURCE_MAPPING_PREFIX.json
│       │   ├── source.json
│       │   ├── sourceMapContent.json
│       │   ├── SPACE_SYMBOL.json
│       │   ├── SPACE.json
│       │   ├── sqlKeywords.json
│       │   ├── sranges.json
│       │   ├── sseUrl.json
│       │   ├── st.json
│       │   ├── ST.json
│       │   ├── stack.json
│       │   ├── START_HIDING.json
│       │   ├── START_OF_LINE.json
│       │   ├── startNoTraversal.json
│       │   ├── STATES.json
│       │   ├── stats.json
│       │   ├── statSync.json
│       │   ├── status.json
│       │   ├── storageStatus.json
│       │   ├── storageType.json
│       │   ├── str.json
│       │   ├── string.json
│       │   ├── stringifiedObject.json
│       │   ├── stringPath.json
│       │   ├── stringResult.json
│       │   ├── stringTag.json
│       │   ├── strValue.json
│       │   ├── style.json
│       │   ├── SUB_NAME.json
│       │   ├── subkey.json
│       │   ├── SUBPROTOCOL.json
│       │   ├── SUITE_NAME.json
│       │   ├── symbolPattern.json
│       │   ├── symbolTag.json
│       │   ├── system
│       │   │   ├── Aa.json
│       │   │   ├── b.json
│       │   │   ├── Development_System_Prompt.json
│       │   │   ├── index.json
│       │   │   ├── marker.json
│       │   │   ├── PATH_NODE_MODULES.json
│       │   │   ├── ProjectsUpdatedInBackgroundEvent.json
│       │   │   ├── RXstyle.json
│       │   │   ├── status.json
│       │   │   └── versionMajorMinor.json
│       │   ├── t.json
│       │   ├── T.json
│       │   ├── Task_List_Helper.json
│       │   ├── Template-Based_MCP_Integration.json
│       │   ├── template.py
│       │   ├── templateDir.json
│       │   ├── tempName.json
│       │   ├── Test_Prompt.json
│       │   ├── text.json
│       │   ├── time.json
│       │   ├── titleSeparator.json
│       │   ├── tmpl.json
│       │   ├── tn.json
│       │   ├── TOPBAR_FACTORY.json
│       │   ├── toValue.json
│       │   ├── transform.json
│       │   ├── trustProxyDefaultSymbol.json
│       │   ├── txt.json
│       │   ├── type.json
│       │   ├── typeArgumentsKey.json
│       │   ├── typeKey.json
│       │   ├── typeMessage.json
│       │   ├── typesRegistryPackageName.json
│       │   ├── u.json
│       │   ├── UNDEFINED.json
│       │   ├── unit.json
│       │   ├── UNMATCHED_SURROGATE_PAIR_REPLACE.json
│       │   ├── ur.json
│       │   ├── usage.json
│       │   ├── USAGE.json
│       │   ├── user
│       │   │   ├── backupId.json
│       │   │   ├── DESCENDING.json
│       │   │   ├── encoded.json
│       │   │   ├── index.json
│       │   │   ├── J.json
│       │   │   ├── MOBILE_QUERY.json
│       │   │   ├── promptId.json
│       │   │   ├── schemaQuery.json
│       │   │   ├── TOPBAR_FACTORY.json
│       │   │   ├── txt.json
│       │   │   └── usage.json
│       │   ├── value.json
│       │   ├── VERSION.json
│       │   ├── version.py
│       │   ├── versionMajorMinor.json
│       │   ├── Vr.json
│       │   ├── watchmanURL.json
│       │   ├── webkit.json
│       │   ├── WIN_SLASH.json
│       │   ├── xhtml.json
│       │   ├── XP_DEFAULT_PATHEXT.json
│       │   ├── y.json
│       │   └── You_are_limited_to_respond_Yes_or_No_onl___.json
│       ├── resources
│       │   ├── __init__.py
│       │   ├── code_examples
│       │   │   └── index.json
│       │   ├── config
│       │   │   └── index.json
│       │   ├── documentation
│       │   │   └── index.json
│       │   ├── images
│       │   │   └── index.json
│       │   ├── index.json
│       │   └── other
│       │       └── index.json
│       ├── server.py
│       ├── templates
│       │   ├── __init__.py
│       │   ├── AbstractFactory.json
│       │   ├── Adapter.json
│       │   ├── base.py
│       │   ├── Builder.json
│       │   ├── Chain.json
│       │   ├── Command.json
│       │   ├── component
│       │   │   ├── AbstractFactory.json
│       │   │   ├── Adapter.json
│       │   │   ├── Builder.json
│       │   │   ├── Chain.json
│       │   │   ├── Command.json
│       │   │   ├── Decorator.json
│       │   │   ├── Facade.json
│       │   │   ├── Factory.json
│       │   │   ├── Iterator.json
│       │   │   ├── Mediator.json
│       │   │   ├── Memento.json
│       │   │   ├── Observer.json
│       │   │   ├── Prototype.json
│       │   │   ├── Proxy.json
│       │   │   ├── Singleton.json
│       │   │   ├── State.json
│       │   │   ├── Strategy.json
│       │   │   ├── TemplateMethod.json
│       │   │   └── Visitor.json
│       │   ├── component.py
│       │   ├── Decorator.json
│       │   ├── Facade.json
│       │   ├── Factory.json
│       │   ├── index.json
│       │   ├── Iterator.json
│       │   ├── manager.py
│       │   ├── Mediator.json
│       │   ├── Memento.json
│       │   ├── Observer.json
│       │   ├── project.py
│       │   ├── Prototype.json
│       │   ├── Proxy.json
│       │   ├── renderer.py
│       │   ├── Singleton.json
│       │   ├── State.json
│       │   ├── Strategy.json
│       │   ├── template_manager.py
│       │   ├── TemplateMethod.json
│       │   ├── types.py
│       │   └── Visitor.json
│       └── utils
│           └── __init__.py
├── SUMMARY.md
├── TASK_COMPLETION_SUMMARY.md
├── templates
│   └── openssl
│       ├── files
│       │   ├── CMakeLists.txt.jinja2
│       │   ├── conanfile.py.jinja2
│       │   ├── main.cpp.jinja2
│       │   └── README.md.jinja2
│       ├── openssl-consumer.json
│       └── template.json
├── test_openssl_integration.sh
├── test_package
│   └── conanfile.py
└── tests
    ├── __init__.py
    ├── conftest.py
    ├── integration
    │   ├── test_core_integration.py
    │   ├── test_mermaid_integration.py
    │   ├── test_prompt_manager_integration.py
    │   └── test_server_integration.py
    ├── test_aws_mcp.py
    ├── test_base_classes.py
    ├── test_config.py
    ├── test_exceptions.py
    ├── test_mermaid.py
    ├── test_prompts.py
    └── test_templates.py
```

# Files

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/prompts/MCP_Server_Integration_Guide.json:
--------------------------------------------------------------------------------

```json
{
  "name": "MCP Server Integration Guide",
  "description": "A comprehensive template for planning, configuring, and integrating multiple MCP servers into a cohesive ecosystem",
  "type": "prompt",
  "category": "other",
  "content": "# MCP Server Integration Guide\n\nI'll help you integrate multiple MCP servers to create a powerful AI context ecosystem for {{project_name}}. By combining specialized MCP servers, you can significantly enhance AI capabilities beyond what a single model can provide.\n\n## Project Requirements Analysis\n\n### Core Use Case\n\nYour primary use case for MCP server integration is:\n- **{{primary_use_case}}**\n\n### Key Requirements\n\nBased on your use case, we'll focus on these requirements:\n1. {{requirement_1}}\n2. {{requirement_2}}\n3. {{requirement_3}}\n\n## MCP Server Selection\n\nBased on your requirements, I recommend these MCP servers:\n\n### Core Infrastructure\n- **{{primary_mcp_server}}**: {{primary_server_description}}\n- **{{secondary_mcp_server}}**: {{secondary_server_description}}\n- **{{tertiary_mcp_server}}**: {{tertiary_server_description}}\n\n### Supporting Services\n- Additional servers to consider: {{additional_servers}}\n\n## Integration Architecture\n\n```mermaid\ngraph TD\n    Client[AI Client] --> |Requests| Primary[{{primary_mcp_server}}]\n    Primary --> |Data Flow| Secondary[{{secondary_mcp_server}}]\n    Primary --> |Data Flow| Tertiary[{{tertiary_mcp_server}}]\n    \n    subgraph \"Core MCP Ecosystem\"\n        Primary\n        Secondary\n        Tertiary\n    end\n```\n\n## Configuration and Setup\n\n### Installation Steps\n\n1. **{{primary_mcp_server}}**:\n   ```bash\n   {{primary_installation_command}}\n   ```\n\n2. **{{secondary_mcp_server}}**:\n   ```bash\n   {{secondary_installation_command}}\n   ```\n\n3. **{{tertiary_mcp_server}}**:\n   ```bash\n   {{tertiary_installation_command}}\n   ```\n\n### Claude Desktop Configuration\n\n```json\n{\n  \"mcpServers\": {\n    \"{{primary_mcp_server_id}}\": {\n      \"command\": \"{{primary_command}}\",\n      \"args\": [{{primary_args}}],\n      \"env\": {\n        {{primary_env_vars}}\n      }\n    },\n    \"{{secondary_mcp_server_id}}\": {\n      \"command\": \"{{secondary_command}}\",\n      \"args\": [{{secondary_args}}],\n      \"env\": {\n        {{secondary_env_vars}}\n      }\n    },\n    \"{{tertiary_mcp_server_id}}\": {\n      \"command\": \"{{tertiary_command}}\",\n      \"args\": [{{tertiary_args}}],\n      \"env\": {\n        {{tertiary_env_vars}}\n      }\n    }\n  }\n}\n```\n\n### Docker Compose Integration\n\n```yaml\nversion: '3'\nservices:\n  {{primary_mcp_server_id}}:\n    image: {{primary_image}}\n    environment:\n      - {{primary_environment_1}}\n      - {{primary_environment_2}}\n    volumes:\n      - {{primary_volume_mapping}}\n    ports:\n      - \"{{primary_port_mapping}}\"\n      \n  {{secondary_mcp_server_id}}:\n    image: {{secondary_image}}\n    environment:\n      - {{secondary_environment_1}}\n      - {{secondary_environment_2}}\n    volumes:\n      - {{secondary_volume_mapping}}\n    ports:\n      - \"{{secondary_port_mapping}}\"\n      \n  {{tertiary_mcp_server_id}}:\n    image: {{tertiary_image}}\n    environment:\n      - {{tertiary_environment_1}}\n      - {{tertiary_environment_2}}\n    volumes:\n      - {{tertiary_volume_mapping}}\n    ports:\n      - \"{{tertiary_port_mapping}}\"\n```\n\n## Integration Patterns\n\n### Data Flow\n\nFor your use case, I recommend the following data flow pattern:\n\n```\n{{data_flow_pattern}}\n```\n\n### Communication Model\n\nThe optimal communication model for your servers is:\n**{{communication_model}}**\n\nRationale: {{communication_rationale}}\n\n## Best Practices for Your Integration\n\n1. **Performance Optimization**: {{performance_recommendation}}\n2. **Security Considerations**: {{security_recommendation}}\n3. **Error Handling**: {{error_handling_recommendation}}\n4. **Testing Strategy**: {{testing_recommendation}}\n\n## MCP Server Interaction Examples\n\n### Example 1: {{example_scenario_1}}\n\n```javascript\n// Client-side code example\nuse_mcp_tool({\n  server_name: \"{{primary_mcp_server_id}}\",\n  tool_name: \"{{example_tool_1}}\",\n  arguments: {\n    {{example_args_1}}\n  }\n});\n```\n\n### Example 2: {{example_scenario_2}}\n\n```javascript\n// Client-side code example\nuse_mcp_tool({\n  server_name: \"{{secondary_mcp_server_id}}\",\n  tool_name: \"{{example_tool_2}}\",\n  arguments: {\n    {{example_args_2}}\n  }\n});\n```\n\n## Troubleshooting Guide\n\n| Problem | Possible Cause | Solution |\n|---------|----------------|----------|\n| {{problem_1}} | {{cause_1}} | {{solution_1}} |\n| {{problem_2}} | {{cause_2}} | {{solution_2}} |\n| {{problem_3}} | {{cause_3}} | {{solution_3}} |\n\n## Next Steps\n\n1. {{next_step_1}}\n2. {{next_step_2}}\n3. {{next_step_3}}\n\nWould you like me to elaborate on any specific aspect of this MCP server integration plan?",
  "variables": [
    "project_name",
    "primary_use_case",
    "requirement_1",
    "requirement_2",
    "requirement_3",
    "primary_mcp_server",
    "primary_server_description",
    "secondary_mcp_server",
    "secondary_server_description",
    "tertiary_mcp_server",
    "tertiary_server_description",
    "additional_servers",
    "primary_installation_command",
    "secondary_installation_command",
    "tertiary_installation_command",
    "primary_mcp_server_id",
    "primary_command",
    "primary_args",
    "primary_env_vars",
    "secondary_mcp_server_id",
    "secondary_command",
    "secondary_args",
    "secondary_env_vars",
    "tertiary_mcp_server_id",
    "tertiary_command",
    "tertiary_args",
    "tertiary_env_vars",
    "primary_image",
    "primary_environment_1",
    "primary_environment_2",
    "primary_volume_mapping",
    "primary_port_mapping",
    "secondary_image",
    "secondary_environment_1",
    "secondary_environment_2",
    "secondary_volume_mapping",
    "secondary_port_mapping",
    "tertiary_image",
    "tertiary_environment_1",
    "tertiary_environment_2",
    "tertiary_volume_mapping",
    "tertiary_port_mapping",
    "data_flow_pattern",
    "communication_model",
    "communication_rationale",
    "performance_recommendation",
    "security_recommendation",
    "error_handling_recommendation",
    "testing_recommendation",
    "example_scenario_1",
    "example_tool_1",
    "example_args_1",
    "example_scenario_2",
    "example_tool_2",
    "example_args_2",
    "problem_1",
    "cause_1",
    "solution_1",
    "problem_2",
    "cause_2",
    "solution_2",
    "problem_3",
    "cause_3",
    "solution_3",
    "next_step_1",
    "next_step_2",
    "next_step_3"
  ],
  "metadata": {
    "source": "/home/sparrow/projects/mcp-prompts/prompts/mcp-server-integration-template.json",
    "imported": true
  }
}
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/prompts/other/MCP_Server_Integration_Guide.json:
--------------------------------------------------------------------------------

```json
{
  "name": "MCP Server Integration Guide",
  "description": "A comprehensive template for planning, configuring, and integrating multiple MCP servers into a cohesive ecosystem",
  "type": "prompt",
  "category": "other",
  "content": "# MCP Server Integration Guide\n\nI'll help you integrate multiple MCP servers to create a powerful AI context ecosystem for {{project_name}}. By combining specialized MCP servers, you can significantly enhance AI capabilities beyond what a single model can provide.\n\n## Project Requirements Analysis\n\n### Core Use Case\n\nYour primary use case for MCP server integration is:\n- **{{primary_use_case}}**\n\n### Key Requirements\n\nBased on your use case, we'll focus on these requirements:\n1. {{requirement_1}}\n2. {{requirement_2}}\n3. {{requirement_3}}\n\n## MCP Server Selection\n\nBased on your requirements, I recommend these MCP servers:\n\n### Core Infrastructure\n- **{{primary_mcp_server}}**: {{primary_server_description}}\n- **{{secondary_mcp_server}}**: {{secondary_server_description}}\n- **{{tertiary_mcp_server}}**: {{tertiary_server_description}}\n\n### Supporting Services\n- Additional servers to consider: {{additional_servers}}\n\n## Integration Architecture\n\n```mermaid\ngraph TD\n    Client[AI Client] --> |Requests| Primary[{{primary_mcp_server}}]\n    Primary --> |Data Flow| Secondary[{{secondary_mcp_server}}]\n    Primary --> |Data Flow| Tertiary[{{tertiary_mcp_server}}]\n    \n    subgraph \"Core MCP Ecosystem\"\n        Primary\n        Secondary\n        Tertiary\n    end\n```\n\n## Configuration and Setup\n\n### Installation Steps\n\n1. **{{primary_mcp_server}}**:\n   ```bash\n   {{primary_installation_command}}\n   ```\n\n2. **{{secondary_mcp_server}}**:\n   ```bash\n   {{secondary_installation_command}}\n   ```\n\n3. **{{tertiary_mcp_server}}**:\n   ```bash\n   {{tertiary_installation_command}}\n   ```\n\n### Claude Desktop Configuration\n\n```json\n{\n  \"mcpServers\": {\n    \"{{primary_mcp_server_id}}\": {\n      \"command\": \"{{primary_command}}\",\n      \"args\": [{{primary_args}}],\n      \"env\": {\n        {{primary_env_vars}}\n      }\n    },\n    \"{{secondary_mcp_server_id}}\": {\n      \"command\": \"{{secondary_command}}\",\n      \"args\": [{{secondary_args}}],\n      \"env\": {\n        {{secondary_env_vars}}\n      }\n    },\n    \"{{tertiary_mcp_server_id}}\": {\n      \"command\": \"{{tertiary_command}}\",\n      \"args\": [{{tertiary_args}}],\n      \"env\": {\n        {{tertiary_env_vars}}\n      }\n    }\n  }\n}\n```\n\n### Docker Compose Integration\n\n```yaml\nversion: '3'\nservices:\n  {{primary_mcp_server_id}}:\n    image: {{primary_image}}\n    environment:\n      - {{primary_environment_1}}\n      - {{primary_environment_2}}\n    volumes:\n      - {{primary_volume_mapping}}\n    ports:\n      - \"{{primary_port_mapping}}\"\n      \n  {{secondary_mcp_server_id}}:\n    image: {{secondary_image}}\n    environment:\n      - {{secondary_environment_1}}\n      - {{secondary_environment_2}}\n    volumes:\n      - {{secondary_volume_mapping}}\n    ports:\n      - \"{{secondary_port_mapping}}\"\n      \n  {{tertiary_mcp_server_id}}:\n    image: {{tertiary_image}}\n    environment:\n      - {{tertiary_environment_1}}\n      - {{tertiary_environment_2}}\n    volumes:\n      - {{tertiary_volume_mapping}}\n    ports:\n      - \"{{tertiary_port_mapping}}\"\n```\n\n## Integration Patterns\n\n### Data Flow\n\nFor your use case, I recommend the following data flow pattern:\n\n```\n{{data_flow_pattern}}\n```\n\n### Communication Model\n\nThe optimal communication model for your servers is:\n**{{communication_model}}**\n\nRationale: {{communication_rationale}}\n\n## Best Practices for Your Integration\n\n1. **Performance Optimization**: {{performance_recommendation}}\n2. **Security Considerations**: {{security_recommendation}}\n3. **Error Handling**: {{error_handling_recommendation}}\n4. **Testing Strategy**: {{testing_recommendation}}\n\n## MCP Server Interaction Examples\n\n### Example 1: {{example_scenario_1}}\n\n```javascript\n// Client-side code example\nuse_mcp_tool({\n  server_name: \"{{primary_mcp_server_id}}\",\n  tool_name: \"{{example_tool_1}}\",\n  arguments: {\n    {{example_args_1}}\n  }\n});\n```\n\n### Example 2: {{example_scenario_2}}\n\n```javascript\n// Client-side code example\nuse_mcp_tool({\n  server_name: \"{{secondary_mcp_server_id}}\",\n  tool_name: \"{{example_tool_2}}\",\n  arguments: {\n    {{example_args_2}}\n  }\n});\n```\n\n## Troubleshooting Guide\n\n| Problem | Possible Cause | Solution |\n|---------|----------------|----------|\n| {{problem_1}} | {{cause_1}} | {{solution_1}} |\n| {{problem_2}} | {{cause_2}} | {{solution_2}} |\n| {{problem_3}} | {{cause_3}} | {{solution_3}} |\n\n## Next Steps\n\n1. {{next_step_1}}\n2. {{next_step_2}}\n3. {{next_step_3}}\n\nWould you like me to elaborate on any specific aspect of this MCP server integration plan?",
  "variables": [
    "project_name",
    "primary_use_case",
    "requirement_1",
    "requirement_2",
    "requirement_3",
    "primary_mcp_server",
    "primary_server_description",
    "secondary_mcp_server",
    "secondary_server_description",
    "tertiary_mcp_server",
    "tertiary_server_description",
    "additional_servers",
    "primary_installation_command",
    "secondary_installation_command",
    "tertiary_installation_command",
    "primary_mcp_server_id",
    "primary_command",
    "primary_args",
    "primary_env_vars",
    "secondary_mcp_server_id",
    "secondary_command",
    "secondary_args",
    "secondary_env_vars",
    "tertiary_mcp_server_id",
    "tertiary_command",
    "tertiary_args",
    "tertiary_env_vars",
    "primary_image",
    "primary_environment_1",
    "primary_environment_2",
    "primary_volume_mapping",
    "primary_port_mapping",
    "secondary_image",
    "secondary_environment_1",
    "secondary_environment_2",
    "secondary_volume_mapping",
    "secondary_port_mapping",
    "tertiary_image",
    "tertiary_environment_1",
    "tertiary_environment_2",
    "tertiary_volume_mapping",
    "tertiary_port_mapping",
    "data_flow_pattern",
    "communication_model",
    "communication_rationale",
    "performance_recommendation",
    "security_recommendation",
    "error_handling_recommendation",
    "testing_recommendation",
    "example_scenario_1",
    "example_tool_1",
    "example_args_1",
    "example_scenario_2",
    "example_tool_2",
    "example_args_2",
    "problem_1",
    "cause_1",
    "solution_1",
    "problem_2",
    "cause_2",
    "solution_2",
    "problem_3",
    "cause_3",
    "solution_3",
    "next_step_1",
    "next_step_2",
    "next_step_3"
  ],
  "metadata": {
    "source": "/home/sparrow/projects/mcp-prompts/prompts/mcp-server-integration-template.json",
    "imported": true
  }
}
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/prompts/other/Template-Based_MCP_Integration.json:
--------------------------------------------------------------------------------

```json
{
  "name": "Template-Based MCP Integration",
  "description": "A powerful template that integrates multiple MCP servers for enhanced AI capabilities, designed for flexible use across different domains and tasks",
  "type": "prompt",
  "category": "other",
  "content": "# Template-Based MCP Integration Guide\n\nYou are an AI assistant enhanced with multiple MCP server capabilities to provide contextually rich assistance for {{domain}} tasks. Your goal is to leverage various MCP resources to deliver comprehensive and accurate responses for {{specific_task}}.\n\n## Available MCP Resources and Their Uses\n\n### Filesystem Resources (`@modelcontextprotocol/server-filesystem`)\n```\n@filesystem:/path/to/file\n```\nUse filesystem resources to:\n- Access local code files for analysis\n- Read documentation stored locally\n- Process configuration files\n- Import templates or structured data\n\n### Memory Resources (`@modelcontextprotocol/server-memory`)\n```\n@memory:session/{{session_id}}\n```\nUse memory resources to:\n- Maintain conversational context across interactions\n- Store intermediate results for complex analyses\n- Cache frequently accessed data\n- Track progress through multi-step workflows\n\n### GitHub Resources (`@modelcontextprotocol/server-github`)\n```\n@github:{{owner}}/{{repo}}/{{branch}}/{{path}}\n```\nUse GitHub resources to:\n- Access remote repository content\n- Compare versions of code or documentation\n- Analyze pull requests and issues\n- Understand project structure and dependencies\n\n### Sequential Thinking Resources (`@modelcontextprotocol/server-sequential-thinking`)\n```\n@sequential-thinking:{{thinking_id}}\n```\nUse sequential thinking to:\n- Break down complex problems into logical steps\n- Document your reasoning process\n- Validate solutions systematically\n- Explore multiple approaches before committing\n\n### Audio Integration Resources (`elevenlabs-mcp-server`)\n```\n@elevenlabs:{{text_to_speak}}\n```\nUse audio integration to:\n- Convert responses to speech for accessibility\n- Create voice prompts for guided tutorials\n- Generate narration for educational content\n- Provide audio feedback on analysis results\n\n## Integration Approaches\n\n### Multi-Resource Context Analysis\nFor complex tasks requiring multiple data sources:\n\n```\nI'll analyze {{topic}} by combining:\n1. Code structure from @filesystem:{{project_path}}\n2. Historical context from @github:{{repo_details}}\n3. Previous findings from @memory:session/{{session_id}}\n4. Step-by-step reasoning with @sequential-thinking:analysis\n```\n\n### Template-Variable Mapping with Resources\nMap template variables to specific resource URIs for dynamic content integration:\n\n```\n{{#each resource_paths}}\n  @{{resource_type}}:{{resource_uri}}\n{{/each}}\n```\n\n### Progressive Resource Loading\nFor large projects with multiple files:\n\n```\n1. First, examine project structure: @github:{{repo}}/structure\n2. Then, analyze specific components:\n   {{#each component_paths}}\n   - @filesystem:{{this}}\n   {{/each}}\n3. Finally, integrate findings using: @sequential-thinking:synthesis\n```\n\n## {{domain}}-Specific Integration Patterns\n\n### Configuration for {{domain}}\n{{domain_config}}\n\n### Specialized Techniques for {{specific_task}}\n{{specialized_techniques}}\n\n## Template Composition with MCP Resources\n\nHere's how to structure your analysis for {{specific_task}} using MCP resources:\n\n```\n# {{specific_task}} Analysis\n\n## Context Information\n{{context_description}}\n{{#if has_code_context}}\nReferenced code: @filesystem:{{code_path}}\n{{/if}}\n{{#if has_github_context}}\nRepository insights: @github:{{repo_path}}\n{{/if}}\n\n## Analysis Approach\n1. {{step_1_description}}\n   {{#if step_1_needs_memory}}\n   Using context from: @memory:{{memory_path_1}}\n   {{/if}}\n2. {{step_2_description}}\n   {{#if step_2_needs_thinking}}\n   Reasoning process: @sequential-thinking:{{thinking_id_2}}\n   {{/if}}\n3. {{step_3_description}}\n   {{#if step_3_has_audio}}\n   Audio explanation: @elevenlabs:{{audio_description}}\n   {{/if}}\n\n## Output Format\n{{output_format_description}}\n```\n\n## Best Practices for Template-Based MCP Integration\n\n1. **Resource Prioritization**: Order resources from most general to most specific\n2. **Error Handling**: Include fallback options if certain resources are unavailable\n3. **Progressive Enhancement**: Start with basic text and enhance with MCP resources\n4. **Cross-Resource Validation**: Compare data across multiple resources for accuracy\n5. **Contextual Relevance**: Only integrate resources that directly contribute to the task\n6. **Modular Templates**: Design templates with reusable resource integration patterns\n7. **Custom Validators**: Create domain-specific validation rules for resource data\n\n## Implementation Examples\n\n### Example 1: Code Review Template with GitHub and Filesystem Integration\n```\n# Code Review for {{repository_name}}\n\n## Repository Context\n@github:{{owner}}/{{repository_name}}/stats\n\n## Pull Request Details\n@github:{{owner}}/{{repository_name}}/pulls/{{pr_number}}\n\n## Files to Review\n{{#each files_to_review}}\n@filesystem:{{this}}\n{{/each}}\n\n## Previous Reviews Context\n@memory:codereviews/{{repository_name}}\n\n## Review Process\n@sequential-thinking:code-review-{{pr_number}}\n\n## Output Format\n- Summary of changes\n- Code quality assessment\n- Security considerations\n- Performance impact\n- Recommendations\n```\n\n### Example 2: {{domain}} Solution Template\n{{domain_example}}\n\n## Conclusion\n\nBy effectively combining template-based prompting with MCP resource integration, you can create sophisticated, context-aware AI interactions that deliver more accurate, personalized, and comprehensive results for {{specific_task}} in the {{domain}} domain.\n\nWhat specific template would you like to develop with MCP resource integration today?",
  "variables": [
    "domain",
    "specific_task",
    "session_id",
    "topic",
    "project_path",
    "repo_details",
    "resource_type",
    "resource_uri",
    "resource_paths",
    "repo",
    "component_paths",
    "domain_config",
    "specialized_techniques",
    "context_description",
    "has_code_context",
    "code_path",
    "has_github_context",
    "repo_path",
    "step_1_description",
    "step_1_needs_memory",
    "memory_path_1",
    "step_2_description",
    "step_2_needs_thinking",
    "thinking_id_2",
    "step_3_description",
    "step_3_has_audio",
    "audio_description",
    "output_format_description",
    "repository_name",
    "owner",
    "pr_number",
    "files_to_review",
    "domain_example",
    "thinking_id"
  ],
  "metadata": {
    "source": "/home/sparrow/projects/mcp-prompts/prompts/template-based-mcp-integration.json",
    "imported": true
  }
}
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/prompts/Template-Based_MCP_Integration.json:
--------------------------------------------------------------------------------

```json
{
  "name": "Template-Based MCP Integration",
  "description": "A powerful template that integrates multiple MCP servers for enhanced AI capabilities, designed for flexible use across different domains and tasks",
  "type": "prompt",
  "category": "other",
  "content": "# Template-Based MCP Integration Guide\n\nYou are an AI assistant enhanced with multiple MCP server capabilities to provide contextually rich assistance for {{domain}} tasks. Your goal is to leverage various MCP resources to deliver comprehensive and accurate responses for {{specific_task}}.\n\n## Available MCP Resources and Their Uses\n\n### Filesystem Resources (`@modelcontextprotocol/server-filesystem`)\n```\n@filesystem:/path/to/file\n```\nUse filesystem resources to:\n- Access local code files for analysis\n- Read documentation stored locally\n- Process configuration files\n- Import templates or structured data\n\n### Memory Resources (`@modelcontextprotocol/server-memory`)\n```\n@memory:session/{{session_id}}\n```\nUse memory resources to:\n- Maintain conversational context across interactions\n- Store intermediate results for complex analyses\n- Cache frequently accessed data\n- Track progress through multi-step workflows\n\n### GitHub Resources (`@modelcontextprotocol/server-github`)\n```\n@github:{{owner}}/{{repo}}/{{branch}}/{{path}}\n```\nUse GitHub resources to:\n- Access remote repository content\n- Compare versions of code or documentation\n- Analyze pull requests and issues\n- Understand project structure and dependencies\n\n### Sequential Thinking Resources (`@modelcontextprotocol/server-sequential-thinking`)\n```\n@sequential-thinking:{{thinking_id}}\n```\nUse sequential thinking to:\n- Break down complex problems into logical steps\n- Document your reasoning process\n- Validate solutions systematically\n- Explore multiple approaches before committing\n\n### Audio Integration Resources (`elevenlabs-mcp-server`)\n```\n@elevenlabs:{{text_to_speak}}\n```\nUse audio integration to:\n- Convert responses to speech for accessibility\n- Create voice prompts for guided tutorials\n- Generate narration for educational content\n- Provide audio feedback on analysis results\n\n## Integration Approaches\n\n### Multi-Resource Context Analysis\nFor complex tasks requiring multiple data sources:\n\n```\nI'll analyze {{topic}} by combining:\n1. Code structure from @filesystem:{{project_path}}\n2. Historical context from @github:{{repo_details}}\n3. Previous findings from @memory:session/{{session_id}}\n4. Step-by-step reasoning with @sequential-thinking:analysis\n```\n\n### Template-Variable Mapping with Resources\nMap template variables to specific resource URIs for dynamic content integration:\n\n```\n{{#each resource_paths}}\n  @{{resource_type}}:{{resource_uri}}\n{{/each}}\n```\n\n### Progressive Resource Loading\nFor large projects with multiple files:\n\n```\n1. First, examine project structure: @github:{{repo}}/structure\n2. Then, analyze specific components:\n   {{#each component_paths}}\n   - @filesystem:{{this}}\n   {{/each}}\n3. Finally, integrate findings using: @sequential-thinking:synthesis\n```\n\n## {{domain}}-Specific Integration Patterns\n\n### Configuration for {{domain}}\n{{domain_config}}\n\n### Specialized Techniques for {{specific_task}}\n{{specialized_techniques}}\n\n## Template Composition with MCP Resources\n\nHere's how to structure your analysis for {{specific_task}} using MCP resources:\n\n```\n# {{specific_task}} Analysis\n\n## Context Information\n{{context_description}}\n{{#if has_code_context}}\nReferenced code: @filesystem:{{code_path}}\n{{/if}}\n{{#if has_github_context}}\nRepository insights: @github:{{repo_path}}\n{{/if}}\n\n## Analysis Approach\n1. {{step_1_description}}\n   {{#if step_1_needs_memory}}\n   Using context from: @memory:{{memory_path_1}}\n   {{/if}}\n2. {{step_2_description}}\n   {{#if step_2_needs_thinking}}\n   Reasoning process: @sequential-thinking:{{thinking_id_2}}\n   {{/if}}\n3. {{step_3_description}}\n   {{#if step_3_has_audio}}\n   Audio explanation: @elevenlabs:{{audio_description}}\n   {{/if}}\n\n## Output Format\n{{output_format_description}}\n```\n\n## Best Practices for Template-Based MCP Integration\n\n1. **Resource Prioritization**: Order resources from most general to most specific\n2. **Error Handling**: Include fallback options if certain resources are unavailable\n3. **Progressive Enhancement**: Start with basic text and enhance with MCP resources\n4. **Cross-Resource Validation**: Compare data across multiple resources for accuracy\n5. **Contextual Relevance**: Only integrate resources that directly contribute to the task\n6. **Modular Templates**: Design templates with reusable resource integration patterns\n7. **Custom Validators**: Create domain-specific validation rules for resource data\n\n## Implementation Examples\n\n### Example 1: Code Review Template with GitHub and Filesystem Integration\n```\n# Code Review for {{repository_name}}\n\n## Repository Context\n@github:{{owner}}/{{repository_name}}/stats\n\n## Pull Request Details\n@github:{{owner}}/{{repository_name}}/pulls/{{pr_number}}\n\n## Files to Review\n{{#each files_to_review}}\n@filesystem:{{this}}\n{{/each}}\n\n## Previous Reviews Context\n@memory:codereviews/{{repository_name}}\n\n## Review Process\n@sequential-thinking:code-review-{{pr_number}}\n\n## Output Format\n- Summary of changes\n- Code quality assessment\n- Security considerations\n- Performance impact\n- Recommendations\n```\n\n### Example 2: {{domain}} Solution Template\n{{domain_example}}\n\n## Conclusion\n\nBy effectively combining template-based prompting with MCP resource integration, you can create sophisticated, context-aware AI interactions that deliver more accurate, personalized, and comprehensive results for {{specific_task}} in the {{domain}} domain.\n\nWhat specific template would you like to develop with MCP resource integration today?",
  "variables": [
    "domain",
    "specific_task",
    "session_id",
    "topic",
    "project_path",
    "repo_details",
    "resource_type",
    "resource_uri",
    "resource_paths",
    "repo",
    "component_paths",
    "domain_config",
    "specialized_techniques",
    "context_description",
    "has_code_context",
    "code_path",
    "has_github_context",
    "repo_path",
    "step_1_description",
    "step_1_needs_memory",
    "memory_path_1",
    "step_2_description",
    "step_2_needs_thinking",
    "thinking_id_2",
    "step_3_description",
    "step_3_has_audio",
    "audio_description",
    "output_format_description",
    "repository_name",
    "owner",
    "pr_number",
    "files_to_review",
    "domain_example",
    "thinking_id"
  ],
  "metadata": {
    "source": "/home/sparrow/projects/mcp-prompts/prompts/template-based-mcp-integration.json",
    "imported": true
  }
}
```

--------------------------------------------------------------------------------
/tests/test_aws_mcp.py:
--------------------------------------------------------------------------------

```python
"""
Tests for AWS MCP integration.

This module contains unit tests for the AWS MCP integration,
including configuration validation, service operations, and best practices.
"""
import os
import json
import pytest
from unittest.mock import Mock, patch, MagicMock
from mcp_project_orchestrator.aws_mcp import (
    AWSConfig,
    AWSMCPIntegration
)


class TestAWSConfig:
    """Test AWS configuration validation and conversion."""
    
    def test_default_config(self):
        """Test default configuration."""
        config = AWSConfig(region='us-east-1')
        assert config.region == 'us-east-1'
        assert config.validate() is True
    
    def test_config_with_credentials(self):
        """Test configuration with credentials."""
        config = AWSConfig(
            region='us-west-2',
            access_key_id='test_key',
            secret_access_key='test_secret'
        )
        assert config.region == 'us-west-2'
        assert config.access_key_id == 'test_key'
        assert config.secret_access_key == 'test_secret'
        assert config.validate() is True
    
    def test_config_validation_missing_secret_key(self):
        """Test validation fails when secret key is missing."""
        config = AWSConfig(
            region='us-east-1',
            access_key_id='key',
            secret_access_key=None
        )
        assert config.validate() is False
    
    def test_to_boto3_config(self):
        """Test conversion to boto3 configuration."""
        config = AWSConfig(
            region='eu-west-1',
            access_key_id='key',
            secret_access_key='secret'
        )
        boto3_config = config.to_boto3_config()
        assert boto3_config['region_name'] == 'eu-west-1'
        assert boto3_config['aws_access_key_id'] == 'key'
        assert boto3_config['aws_secret_access_key'] == 'secret'


class TestAWSMCPIntegration:
    """Test AWS MCP integration."""
    
    def test_initialization(self):
        """Test AWS MCP integration initialization."""
        config = AWSConfig(region='us-east-1')
        aws = AWSMCPIntegration(config)
        assert aws.config.region == 'us-east-1'
    
    def test_get_best_practices_s3(self):
        """Test getting S3 best practices."""
        aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))
        practices = aws.get_aws_best_practices('s3')
        
        assert 'security' in practices
        assert 'cost' in practices
        assert 'performance' in practices
        assert len(practices['security']) > 0
    
    def test_get_best_practices_ec2(self):
        """Test getting EC2 best practices."""
        aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))
        practices = aws.get_aws_best_practices('ec2')
        
        assert 'security' in practices
        assert 'cost' in practices
        assert 'performance' in practices
    
    def test_get_best_practices_lambda(self):
        """Test getting Lambda best practices."""
        aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))
        practices = aws.get_aws_best_practices('lambda')
        
        assert 'security' in practices
        assert 'cost' in practices
        assert 'performance' in practices
    
    def test_estimate_costs_s3(self):
        """Test S3 cost estimation."""
        aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))
        estimate = aws.estimate_costs('s3', {
            'storage_gb': 100,
            'requests': 10000,
            'data_transfer_gb': 50
        })
        
        assert estimate['service'] == 's3'
        assert 'breakdown' in estimate
        assert 'total_usd' in estimate
        assert estimate['total_usd'] > 0
    
    def test_estimate_costs_ec2(self):
        """Test EC2 cost estimation."""
        aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))
        estimate = aws.estimate_costs('ec2', {
            'hours': 730
        })
        
        assert estimate['service'] == 'ec2'
        assert 'breakdown' in estimate
        assert 'total_usd' in estimate
    
    def test_estimate_costs_lambda(self):
        """Test Lambda cost estimation."""
        aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))
        estimate = aws.estimate_costs('lambda', {
            'requests': 1000000,
            'gb_seconds': 500000
        })
        
        assert estimate['service'] == 'lambda'
        assert 'breakdown' in estimate
        assert 'total_usd' in estimate
    
    @patch('mcp_project_orchestrator.aws_mcp.AWSMCPIntegration._get_client')
    def test_list_s3_buckets(self, mock_get_client):
        """Test listing S3 buckets."""
        mock_s3 = Mock()
        mock_s3.list_buckets.return_value = {
            'Buckets': [
                {'Name': 'bucket1', 'CreationDate': '2024-01-01'},
                {'Name': 'bucket2', 'CreationDate': '2024-01-02'}
            ]
        }
        mock_get_client.return_value = mock_s3
        
        aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))
        aws._boto3_available = True
        buckets = aws.list_s3_buckets()
        
        assert len(buckets) == 2
        assert buckets[0]['Name'] == 'bucket1'
    
    @patch('mcp_project_orchestrator.aws_mcp.AWSMCPIntegration._get_client')
    def test_list_ec2_instances(self, mock_get_client):
        """Test listing EC2 instances."""
        mock_ec2 = Mock()
        mock_ec2.describe_instances.return_value = {
            'Reservations': [
                {
                    'Instances': [
                        {
                            'InstanceId': 'i-1234567890abcdef0',
                            'State': {'Name': 'running'},
                            'InstanceType': 't2.micro'
                        }
                    ]
                }
            ]
        }
        mock_get_client.return_value = mock_ec2
        
        aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))
        aws._boto3_available = True
        instances = aws.list_ec2_instances()
        
        assert len(instances) == 1
        assert instances[0]['InstanceId'] == 'i-1234567890abcdef0'
    
    @patch('mcp_project_orchestrator.aws_mcp.AWSMCPIntegration._get_client')
    def test_list_lambda_functions(self, mock_get_client):
        """Test listing Lambda functions."""
        mock_lambda = Mock()
        mock_lambda.list_functions.return_value = {
            'Functions': [
                {
                    'FunctionName': 'my-function',
                    'Runtime': 'python3.9'
                }
            ]
        }
        mock_get_client.return_value = mock_lambda
        
        aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))
        aws._boto3_available = True
        functions = aws.list_lambda_functions()
        
        assert len(functions) == 1
        assert functions[0]['FunctionName'] == 'my-function'


if __name__ == '__main__':
    pytest.main([__file__, '-v'])
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/prompts/Consolidated_TypeScript_Interfaces_Template.json:
--------------------------------------------------------------------------------

```json
{
  "name": "Consolidated TypeScript Interfaces Template",
  "description": "A template for creating a unified TypeScript interfaces file that consolidates related interfaces into a centralized location",
  "type": "prompt",
  "category": "development",
  "content": "/**\n * {{project_name}} - Unified Interface Definitions\n * \n * This file contains all interface definitions for the {{project_name}} project, \n * organized by domain and responsibility.\n */\n\n// ============================\n// Core Domain Interfaces\n// ============================\n\n/**\n * {{primary_entity}} interface\n * {{primary_entity_description}}\n */\nexport interface {{primary_entity}} {\n  /** Unique identifier */\n  id: string;\n  \n  /** Name for display purposes */\n  name: string;\n  \n  /** Optional description */\n  description?: string;\n  \n  /** Content or data */\n  content: string;\n  \n  /** Additional properties */\n  {{additional_properties}}\n  \n  /** Creation timestamp (ISO string) */\n  createdAt: string;\n  \n  /** Last update timestamp (ISO string) */\n  updatedAt: string;\n  \n  /** Version number, incremented on updates */\n  version: number;\n  \n  /** Optional metadata */\n  metadata?: Record<string, any>;\n}\n\n// ============================\n// Service Interfaces\n// ============================\n\n/**\n * {{service_name}} interface\n * Defines the contract for service operations on {{primary_entity}} objects\n */\nexport interface {{service_name}} {\n  /**\n   * Get a {{primary_entity}} by ID\n   * @param id {{primary_entity}} ID\n   * @returns The {{primary_entity}}\n   */\n  get{{primary_entity}}(id: string): Promise<{{primary_entity}}>;\n  \n  /**\n   * Add a new {{primary_entity}}\n   * @param data Partial {{primary_entity}} data\n   * @returns The created {{primary_entity}}\n   */\n  add{{primary_entity}}(data: Partial<{{primary_entity}}>): Promise<{{primary_entity}}>;\n  \n  /**\n   * Update an existing {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   * @param data Updated {{primary_entity}} data\n   * @returns The updated {{primary_entity}}\n   */\n  update{{primary_entity}}(id: string, data: Partial<{{primary_entity}}>): Promise<{{primary_entity}}>;\n  \n  /**\n   * List {{primary_entity}} objects with optional filtering\n   * @param options Filter options\n   * @returns Filtered list of {{primary_entity}} objects\n   */\n  list{{primary_entity}}s(options?: {{list_options_interface}}): Promise<{{primary_entity}}[]>;\n  \n  /**\n   * Delete a {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   */\n  delete{{primary_entity}}(id: string): Promise<void>;\n  \n  /**\n   * Additional service methods\n   */\n  {{additional_service_methods}}\n}\n\n// ============================\n// Storage Interfaces\n// ============================\n\n/**\n * Storage adapter interface for {{primary_entity}} persistence\n */\nexport interface StorageAdapter {\n  /**\n   * Connect to the storage\n   */\n  connect(): Promise<void>;\n  \n  /**\n   * Disconnect from the storage\n   */\n  disconnect(): Promise<void>;\n  \n  /**\n   * Check if connected to the storage\n   */\n  isConnected(): boolean | Promise<boolean>;\n  \n  /**\n   * Save a {{primary_entity}} to storage\n   * @param {{primary_entity_lowercase}} {{primary_entity}} to save\n   * @returns {{primary_entity}} ID or the full {{primary_entity}}\n   */\n  save{{primary_entity}}({{primary_entity_lowercase}}: Partial<{{primary_entity}}>): Promise<string | {{primary_entity}}>;\n  \n  /**\n   * Get a {{primary_entity}} by ID\n   * @param id {{primary_entity}} ID\n   * @returns {{primary_entity}}\n   */\n  get{{primary_entity}}(id: string): Promise<{{primary_entity}}>;\n  \n  /**\n   * Update a {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   * @param data Updated {{primary_entity}} data\n   * @returns Updated {{primary_entity}} or void\n   */\n  update{{primary_entity}}?(id: string, data: Partial<{{primary_entity}}>): Promise<{{primary_entity}} | void>;\n  \n  /**\n   * List {{primary_entity}} objects with filtering options\n   * @param options Filtering options\n   * @returns Array of {{primary_entity}} objects matching options\n   */\n  list{{primary_entity}}s(options?: {{list_options_interface}}): Promise<{{primary_entity}}[]>;\n  \n  /**\n   * Delete a {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   */\n  delete{{primary_entity}}(id: string): Promise<void>;\n  \n  /**\n   * Clear all {{primary_entity}} objects\n   * Removes all {{primary_entity}} objects from storage\n   */\n  clearAll?(): Promise<void>;\n  \n  /**\n   * Additional storage methods\n   */\n  {{additional_storage_methods}}\n}\n\n// ============================\n// Configuration Interfaces\n// ============================\n\n/**\n * {{project_name}} configuration interface\n */\nexport interface {{config_interface_name}} {\n  /** Application name */\n  name: string;\n  \n  /** Application version */\n  version: string;\n  \n  /** Environment: production, development, etc. */\n  environment: string;\n  \n  /** Storage configuration */\n  storage: {\n    type: string;\n    path?: string;\n    connectionString?: string;\n  };\n  \n  /** Server configuration */\n  server: {\n    port: number;\n    host: string;\n    {{additional_server_config}}\n  };\n  \n  /** Logging configuration */\n  logging: {\n    level: 'debug' | 'info' | 'warn' | 'error';\n    {{additional_logging_config}}\n  };\n  \n  /** Additional configuration properties */\n  {{additional_config_properties}}\n}\n\n// ============================\n// Utility Types\n// ============================\n\n/**\n * Options for listing {{primary_entity}} objects\n */\nexport interface {{list_options_interface}} {\n  /** Filter options */\n  {{filter_options}}\n  \n  /** Pagination options */\n  offset?: number;\n  limit?: number;\n  \n  /** Sorting options */\n  sort?: string;\n  order?: 'asc' | 'desc';\n}\n\n/**\n * Error interface with additional context\n */\nexport interface ErrorWithContext extends Error {\n  /** Error code */\n  code?: string;\n  \n  /** HTTP status code */\n  statusCode?: number;\n  \n  /** Additional context object */\n  context?: Record<string, any>;\n  \n  /** Original error if this wraps another error */\n  originalError?: Error;\n}\n\n// ============================\n// Additional Interfaces\n// ============================\n\n{{additional_interfaces}}",
  "variables": [
    "project_name",
    "primary_entity",
    "primary_entity_description",
    "primary_entity_lowercase",
    "additional_properties",
    "service_name",
    "list_options_interface",
    "additional_service_methods",
    "additional_storage_methods",
    "config_interface_name",
    "additional_server_config",
    "additional_logging_config",
    "additional_config_properties",
    "filter_options",
    "additional_interfaces"
  ],
  "metadata": {
    "source": "/home/sparrow/projects/mcp-prompts/prompts/consolidated-interfaces-template.json",
    "imported": true
  }
}
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/prompts/development/Consolidated_TypeScript_Interfaces_Template.json:
--------------------------------------------------------------------------------

```json
{
  "name": "Consolidated TypeScript Interfaces Template",
  "description": "A template for creating a unified TypeScript interfaces file that consolidates related interfaces into a centralized location",
  "type": "prompt",
  "category": "development",
  "content": "/**\n * {{project_name}} - Unified Interface Definitions\n * \n * This file contains all interface definitions for the {{project_name}} project, \n * organized by domain and responsibility.\n */\n\n// ============================\n// Core Domain Interfaces\n// ============================\n\n/**\n * {{primary_entity}} interface\n * {{primary_entity_description}}\n */\nexport interface {{primary_entity}} {\n  /** Unique identifier */\n  id: string;\n  \n  /** Name for display purposes */\n  name: string;\n  \n  /** Optional description */\n  description?: string;\n  \n  /** Content or data */\n  content: string;\n  \n  /** Additional properties */\n  {{additional_properties}}\n  \n  /** Creation timestamp (ISO string) */\n  createdAt: string;\n  \n  /** Last update timestamp (ISO string) */\n  updatedAt: string;\n  \n  /** Version number, incremented on updates */\n  version: number;\n  \n  /** Optional metadata */\n  metadata?: Record<string, any>;\n}\n\n// ============================\n// Service Interfaces\n// ============================\n\n/**\n * {{service_name}} interface\n * Defines the contract for service operations on {{primary_entity}} objects\n */\nexport interface {{service_name}} {\n  /**\n   * Get a {{primary_entity}} by ID\n   * @param id {{primary_entity}} ID\n   * @returns The {{primary_entity}}\n   */\n  get{{primary_entity}}(id: string): Promise<{{primary_entity}}>;\n  \n  /**\n   * Add a new {{primary_entity}}\n   * @param data Partial {{primary_entity}} data\n   * @returns The created {{primary_entity}}\n   */\n  add{{primary_entity}}(data: Partial<{{primary_entity}}>): Promise<{{primary_entity}}>;\n  \n  /**\n   * Update an existing {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   * @param data Updated {{primary_entity}} data\n   * @returns The updated {{primary_entity}}\n   */\n  update{{primary_entity}}(id: string, data: Partial<{{primary_entity}}>): Promise<{{primary_entity}}>;\n  \n  /**\n   * List {{primary_entity}} objects with optional filtering\n   * @param options Filter options\n   * @returns Filtered list of {{primary_entity}} objects\n   */\n  list{{primary_entity}}s(options?: {{list_options_interface}}): Promise<{{primary_entity}}[]>;\n  \n  /**\n   * Delete a {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   */\n  delete{{primary_entity}}(id: string): Promise<void>;\n  \n  /**\n   * Additional service methods\n   */\n  {{additional_service_methods}}\n}\n\n// ============================\n// Storage Interfaces\n// ============================\n\n/**\n * Storage adapter interface for {{primary_entity}} persistence\n */\nexport interface StorageAdapter {\n  /**\n   * Connect to the storage\n   */\n  connect(): Promise<void>;\n  \n  /**\n   * Disconnect from the storage\n   */\n  disconnect(): Promise<void>;\n  \n  /**\n   * Check if connected to the storage\n   */\n  isConnected(): boolean | Promise<boolean>;\n  \n  /**\n   * Save a {{primary_entity}} to storage\n   * @param {{primary_entity_lowercase}} {{primary_entity}} to save\n   * @returns {{primary_entity}} ID or the full {{primary_entity}}\n   */\n  save{{primary_entity}}({{primary_entity_lowercase}}: Partial<{{primary_entity}}>): Promise<string | {{primary_entity}}>;\n  \n  /**\n   * Get a {{primary_entity}} by ID\n   * @param id {{primary_entity}} ID\n   * @returns {{primary_entity}}\n   */\n  get{{primary_entity}}(id: string): Promise<{{primary_entity}}>;\n  \n  /**\n   * Update a {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   * @param data Updated {{primary_entity}} data\n   * @returns Updated {{primary_entity}} or void\n   */\n  update{{primary_entity}}?(id: string, data: Partial<{{primary_entity}}>): Promise<{{primary_entity}} | void>;\n  \n  /**\n   * List {{primary_entity}} objects with filtering options\n   * @param options Filtering options\n   * @returns Array of {{primary_entity}} objects matching options\n   */\n  list{{primary_entity}}s(options?: {{list_options_interface}}): Promise<{{primary_entity}}[]>;\n  \n  /**\n   * Delete a {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   */\n  delete{{primary_entity}}(id: string): Promise<void>;\n  \n  /**\n   * Clear all {{primary_entity}} objects\n   * Removes all {{primary_entity}} objects from storage\n   */\n  clearAll?(): Promise<void>;\n  \n  /**\n   * Additional storage methods\n   */\n  {{additional_storage_methods}}\n}\n\n// ============================\n// Configuration Interfaces\n// ============================\n\n/**\n * {{project_name}} configuration interface\n */\nexport interface {{config_interface_name}} {\n  /** Application name */\n  name: string;\n  \n  /** Application version */\n  version: string;\n  \n  /** Environment: production, development, etc. */\n  environment: string;\n  \n  /** Storage configuration */\n  storage: {\n    type: string;\n    path?: string;\n    connectionString?: string;\n  };\n  \n  /** Server configuration */\n  server: {\n    port: number;\n    host: string;\n    {{additional_server_config}}\n  };\n  \n  /** Logging configuration */\n  logging: {\n    level: 'debug' | 'info' | 'warn' | 'error';\n    {{additional_logging_config}}\n  };\n  \n  /** Additional configuration properties */\n  {{additional_config_properties}}\n}\n\n// ============================\n// Utility Types\n// ============================\n\n/**\n * Options for listing {{primary_entity}} objects\n */\nexport interface {{list_options_interface}} {\n  /** Filter options */\n  {{filter_options}}\n  \n  /** Pagination options */\n  offset?: number;\n  limit?: number;\n  \n  /** Sorting options */\n  sort?: string;\n  order?: 'asc' | 'desc';\n}\n\n/**\n * Error interface with additional context\n */\nexport interface ErrorWithContext extends Error {\n  /** Error code */\n  code?: string;\n  \n  /** HTTP status code */\n  statusCode?: number;\n  \n  /** Additional context object */\n  context?: Record<string, any>;\n  \n  /** Original error if this wraps another error */\n  originalError?: Error;\n}\n\n// ============================\n// Additional Interfaces\n// ============================\n\n{{additional_interfaces}}",
  "variables": [
    "project_name",
    "primary_entity",
    "primary_entity_description",
    "primary_entity_lowercase",
    "additional_properties",
    "service_name",
    "list_options_interface",
    "additional_service_methods",
    "additional_storage_methods",
    "config_interface_name",
    "additional_server_config",
    "additional_logging_config",
    "additional_config_properties",
    "filter_options",
    "additional_interfaces"
  ],
  "metadata": {
    "source": "/home/sparrow/projects/mcp-prompts/prompts/consolidated-interfaces-template.json",
    "imported": true
  }
}
```

--------------------------------------------------------------------------------
/aws-sip-trunk/QUICKSTART.md:
--------------------------------------------------------------------------------

```markdown
# AWS SIP Trunk Quick Start Guide

Get your Asterisk SIP trunk running on AWS in under 30 minutes.

## Prerequisites Checklist

- [ ] AWS account with admin access
- [ ] AWS CLI installed and configured (`aws configure`)
- [ ] Terraform >= 1.5.0 installed (or Bash for manual deployment)
- [ ] SSH key pair created in AWS console
- [ ] ElevenLabs account with SIP trunk credentials
- [ ] Phone number from ElevenLabs in E.164 format

## 5-Minute Setup (Terraform)

### Step 1: Configure Environment (2 min)

```bash
# Navigate to project
cd /workspace/aws-sip-trunk/terraform

# Copy example variables
cp terraform.tfvars.example terraform.tfvars

# Edit with your values
vim terraform.tfvars
```

Required values in `terraform.tfvars`:
```hcl
aws_region                  = "us-east-1"
ssh_key_name                = "my-aws-key"
elevenlabs_phone_e164       = "+12025551234"
elevenlabs_sip_password     = "your-password-here"
alarm_email                 = "[email protected]"
```

### Step 2: Deploy Infrastructure (1 min)

```bash
# Initialize Terraform
terraform init

# Review what will be created
terraform plan

# Deploy (type 'yes' when prompted)
terraform apply
```

### Step 3: Wait for Asterisk Installation (15-20 min)

Terraform will complete in 2-3 minutes, but Asterisk compilation takes 15-20 minutes.

```bash
# Get your instance details
export ELASTIC_IP=$(terraform output -raw asterisk_public_ip)
export INSTANCE_ID=$(terraform output -raw asterisk_instance_id)
export SSH_KEY="your-key-name"

# Monitor installation progress
ssh -i ~/.ssh/$SSH_KEY.pem ec2-user@$ELASTIC_IP \
  "tail -f /var/log/asterisk-setup.log"
```

Look for:
```
=== Asterisk SIP Trunk Installation Complete ===
```

### Step 4: Verify Installation (2 min)

```bash
# SSH into instance
ssh -i ~/.ssh/$SSH_KEY.pem ec2-user@$ELASTIC_IP

# Check Asterisk status
sudo systemctl status asterisk

# Verify PJSIP endpoint
sudo asterisk -rx "pjsip show endpoints"
```

Expected output:
```
Endpoint:  elevenlabs                                          Unavailable   0 of inf
```

"Unavailable" is normal until you configure ElevenLabs side.

## Configure ElevenLabs (5 min)

### Step 1: Login to ElevenLabs Dashboard

1. Go to https://elevenlabs.io/app/conversational-ai
2. Navigate to your agent settings
3. Go to "Phone Numbers" or "SIP Trunking" section

### Step 2: Add SIP Trunk

Configure these settings:

```
SIP Server:     YOUR_ELASTIC_IP:5060
Transport:      TCP
Username:       +12025551234 (your E.164 number)
Password:       (your SIP password)
Codecs:         ulaw, alaw
```

### Step 3: Test Connectivity

Back on your Asterisk server:

```bash
# Check if endpoint is now available
sudo asterisk -rx "pjsip show endpoints"
```

Should show:
```
Endpoint:  elevenlabs                                          Available     0 of inf
```

## Test Your First Call (5 min)

### Inbound Test (from ElevenLabs to Asterisk)

1. In ElevenLabs dashboard, initiate a test call to your Asterisk number
2. Monitor on Asterisk:

```bash
sudo asterisk -rx "core show channels"
```

### Outbound Test (from Asterisk to ElevenLabs)

```bash
# Replace AGENT_NUMBER with your ElevenLabs agent number
sudo asterisk -rx "channel originate PJSIP/AGENT_NUMBER@elevenlabs application Playback hello-world"
```

## Troubleshooting Quick Fixes

### Issue: "One-way audio" or "No audio"

```bash
# Check Security Group allows RTP
aws ec2 describe-security-groups --group-ids $SG_ID | grep 10000

# If missing, add RTP rule
terraform apply -auto-approve
```

### Issue: "Endpoint shows Unavailable"

```bash
# Enable debug logging
sudo asterisk -rx "pjsip set logger on"

# Watch logs for authentication errors
sudo tail -f /var/log/asterisk/full | grep elevenlabs
```

Common causes:
- Wrong password → Update in terraform.tfvars and `terraform apply`
- E.164 format wrong → Must start with `+` (e.g., `+12025551234`)
- ElevenLabs not configured → Complete ElevenLabs setup above

### Issue: "Cannot SSH to instance"

```bash
# Check if Security Group allows SSH from your IP
MY_IP=$(curl -s ifconfig.me)
aws ec2 authorize-security-group-ingress \
  --group-id $SG_ID \
  --protocol tcp \
  --port 22 \
  --cidr $MY_IP/32
```

## Next Steps

### Enable Call Recording

```bash
# SSH to instance
ssh -i ~/.ssh/$SSH_KEY.pem ec2-user@$ELASTIC_IP

# Edit dialplan (already configured if terraform enable_call_recordings=true)
sudo vim /etc/asterisk/extensions.conf

# Reload dialplan
sudo asterisk -rx "dialplan reload"
```

### View CloudWatch Dashboard

```bash
# Get dashboard URL
terraform output cloudwatch_dashboard_url

# Open in browser
```

### Monitor Call Quality

```bash
# Real-time channel statistics
sudo asterisk -rx "pjsip show channelstats"

# View active calls
sudo asterisk -rx "core show channels verbose"
```

### Check Recordings (if enabled)

```bash
# Local recordings
ls -lh /var/spool/asterisk/recordings/

# S3 recordings
aws s3 ls s3://$(terraform output -raw recordings_bucket)/
```

## Production Checklist

Before going to production:

- [ ] Enable TLS transport (`enable_tls = true` in terraform.tfvars)
- [ ] Configure DNS with Route 53 (optional but recommended)
- [ ] Set up CloudWatch alarms (automatic if `alarm_email` set)
- [ ] Enable high availability (`enable_high_availability = true`)
- [ ] Review Security Group rules (restrict SSH to your IP)
- [ ] Test failover procedures
- [ ] Document your dialplan customizations
- [ ] Set up backup procedures (automatic if `backup_enabled = true`)

## Cost Estimate

**Development/Testing:**
- EC2 t3.small: ~$15/month
- Elastic IP: $3.60/month
- CloudWatch/S3: ~$5/month
- **Total: ~$25/month**

**Production:**
- EC2 t3.medium: ~$30/month
- Elastic IP: $3.60/month
- CloudWatch/S3: ~$10/month
- **Total: ~$45/month**

## Getting Help

### View Logs
```bash
# Full Asterisk log
sudo tail -f /var/log/asterisk/full

# Error messages only
sudo grep ERROR /var/log/asterisk/full | tail -20

# Installation log
tail -f /var/log/asterisk-setup.log
```

### Useful Commands
```bash
# Restart Asterisk
sudo systemctl restart asterisk

# Reload specific module
sudo asterisk -rx "module reload res_pjsip.so"

# Show SIP peers
sudo asterisk -rx "pjsip show endpoints"

# Show transports
sudo asterisk -rx "pjsip show transports"

# Enable verbose debugging
sudo asterisk -rx "core set verbose 5"
sudo asterisk -rx "pjsip set logger on"
```

### Documentation
- Full deployment guide: [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)
- Troubleshooting: [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)
- Asterisk docs: https://docs.asterisk.org/
- ElevenLabs SIP: https://elevenlabs.io/docs/agents-platform/phone-numbers/sip-trunking

## Cleanup (When Done Testing)

```bash
# Destroy all resources
cd /workspace/aws-sip-trunk/terraform
terraform destroy

# Type 'yes' when prompted
# This will delete: EC2, VPC, S3 buckets (if empty), all configurations
```

**Warning:** This is irreversible. Backup any recordings first!

---

**Questions?** Check [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) or create an issue in the project repository.

```

--------------------------------------------------------------------------------
/printcast-agent/src/mcp_server/main.py:
--------------------------------------------------------------------------------

```python
#!/usr/bin/env python3
"""
Main entry point for PrintCast Agent MCP Server.

This script starts the MCP server and initializes all services.
"""

import asyncio
import os
import signal
import sys
from pathlib import Path
from typing import Any, Dict, Optional

import structlog
from dotenv import load_dotenv
from pydantic_settings import BaseSettings

# Add src to path
sys.path.insert(0, str(Path(__file__).parent.parent))

from mcp_server.server import PrintCastMCPServer

# Load environment variables
load_dotenv()

# Configure logging
structlog.configure(
    processors=[
        structlog.stdlib.filter_by_level,
        structlog.stdlib.add_logger_name,
        structlog.stdlib.add_log_level,
        structlog.stdlib.PositionalArgumentsFormatter(),
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.processors.StackInfoRenderer(),
        structlog.processors.format_exc_info,
        structlog.processors.UnicodeDecoder(),
        structlog.processors.JSONRenderer()
    ],
    context_class=dict,
    logger_factory=structlog.stdlib.LoggerFactory(),
    cache_logger_on_first_use=True,
)

logger = structlog.get_logger(__name__)


class Settings(BaseSettings):
    """Application settings from environment variables."""
    
    # Server settings
    server_name: str = "PrintCast Agent"
    server_port: int = 8000
    debug: bool = False
    
    # Asterisk settings
    asterisk_host: str = "localhost"
    asterisk_port: int = 5038
    asterisk_username: str = "admin"
    asterisk_password: str = ""
    asterisk_context: str = "printcast-ivr"
    
    # ElevenLabs settings
    elevenlabs_api_key: str = ""
    elevenlabs_agent_id: Optional[str] = None
    elevenlabs_voice_id: str = "21m00Tcm4TlvDq8ikWAM"
    elevenlabs_model: str = "eleven_multilingual_v2"
    
    # Content settings
    github_token: Optional[str] = None
    news_api_key: Optional[str] = None
    rss_feeds: str = "https://news.ycombinator.com/rss,https://feeds.feedburner.com/TechCrunch/"
    
    # Printing settings
    default_printer: str = "default"
    cups_server: str = "localhost:631"
    print_temp_dir: str = "/tmp/printcast"
    
    # Delivery settings
    default_carrier: str = "post"
    sender_name: str = "PrintCast"
    sender_street: str = "Václavské náměstí 1"
    sender_city: str = "Praha"
    sender_postal_code: str = "11000"
    sender_country: str = "CZ"
    
    # Delivery API keys
    zasilkovna_api_key: Optional[str] = None
    dpd_api_key: Optional[str] = None
    ppl_api_key: Optional[str] = None
    
    # AWS settings (optional)
    aws_region: str = "eu-central-1"
    aws_access_key_id: Optional[str] = None
    aws_secret_access_key: Optional[str] = None
    s3_bucket: Optional[str] = None
    
    class Config:
        env_file = ".env"
        case_sensitive = False


def build_config(settings: Settings) -> Dict[str, Any]:
    """
    Build configuration dictionary from settings.
    
    Args:
        settings: Application settings
    
    Returns:
        Configuration dictionary
    """
    # Parse RSS feeds
    rss_feeds = [f.strip() for f in settings.rss_feeds.split(",") if f.strip()]
    
    config = {
        "asterisk": {
            "host": settings.asterisk_host,
            "port": settings.asterisk_port,
            "username": settings.asterisk_username,
            "password": settings.asterisk_password,
            "context": settings.asterisk_context,
        },
        "elevenlabs": {
            "api_key": settings.elevenlabs_api_key,
            "agent_id": settings.elevenlabs_agent_id,
            "voice_id": settings.elevenlabs_voice_id,
            "model": settings.elevenlabs_model,
        },
        "content": {
            "github_token": settings.github_token,
            "news_api_key": settings.news_api_key,
            "rss_feeds": rss_feeds,
            "cache_ttl": 3600,
        },
        "printing": {
            "default_printer": settings.default_printer,
            "cups_server": settings.cups_server,
            "temp_dir": settings.print_temp_dir,
            "pdf_settings": {
                "page_size": "A4",
                "margin": 20,
            },
        },
        "delivery": {
            "default_carrier": settings.default_carrier,
            "sender_address": {
                "name": settings.sender_name,
                "street": settings.sender_street,
                "city": settings.sender_city,
                "postal_code": settings.sender_postal_code,
                "country": settings.sender_country,
            },
            "carriers": {
                "post": {"enabled": True},
                "zasilkovna": {"enabled": bool(settings.zasilkovna_api_key)},
                "dpd": {"enabled": bool(settings.dpd_api_key)},
                "ppl": {"enabled": bool(settings.ppl_api_key)},
                "courier": {"enabled": True},
            },
            "api_keys": {
                "zasilkovna": settings.zasilkovna_api_key,
                "dpd": settings.dpd_api_key,
                "ppl": settings.ppl_api_key,
            },
        },
    }
    
    # Add AWS config if credentials provided
    if settings.aws_access_key_id:
        config["aws"] = {
            "region": settings.aws_region,
            "access_key_id": settings.aws_access_key_id,
            "secret_access_key": settings.aws_secret_access_key,
            "s3_bucket": settings.s3_bucket,
        }
    
    return config


async def main():
    """Main application entry point."""
    # Load settings
    settings = Settings()
    
    # Build configuration
    config = build_config(settings)
    
    # Create server
    server = PrintCastMCPServer(config)
    
    # Setup signal handlers
    def signal_handler(sig, frame):
        logger.info("Shutdown signal received", signal=sig)
        asyncio.create_task(shutdown(server))
    
    signal.signal(signal.SIGINT, signal_handler)
    signal.signal(signal.SIGTERM, signal_handler)
    
    try:
        # Start server
        logger.info(
            "Starting PrintCast MCP Server",
            server_name=settings.server_name,
            debug=settings.debug
        )
        
        await server.start()
        
    except Exception as e:
        logger.error("Server failed to start", error=str(e))
        sys.exit(1)


async def shutdown(server: PrintCastMCPServer):
    """
    Graceful shutdown handler.
    
    Args:
        server: Server instance to shutdown
    """
    try:
        logger.info("Shutting down server...")
        await server.stop()
        logger.info("Server shutdown complete")
        
        # Stop event loop
        loop = asyncio.get_event_loop()
        loop.stop()
        
    except Exception as e:
        logger.error("Error during shutdown", error=str(e))
        sys.exit(1)


if __name__ == "__main__":
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        logger.info("Server interrupted by user")
    except Exception as e:
        logger.error("Unexpected error", error=str(e))
        sys.exit(1)
```

--------------------------------------------------------------------------------
/tests/integration/test_prompt_manager_integration.py:
--------------------------------------------------------------------------------

```python
"""
Integration tests for the prompt manager.

These tests verify that the prompt manager components work together properly.
"""

import os
import pytest
import tempfile
from pathlib import Path
import json

from mcp_project_orchestrator.core import MCPConfig
from mcp_project_orchestrator.prompt_manager import PromptManager
from mcp_project_orchestrator.prompt_manager import PromptTemplate
from mcp_project_orchestrator.prompt_manager import PromptLoader


class TestPromptManagerIntegration:
    """Integration tests for prompt manager components."""
    
    @pytest.fixture
    def temp_prompts_dir(self):
        """Create a temporary prompts directory."""
        with tempfile.TemporaryDirectory() as temp_dir:
            prompts_dir = Path(temp_dir) / "prompts"
            prompts_dir.mkdir(exist_ok=True)
            yield prompts_dir
    
    @pytest.fixture
    def config(self, temp_prompts_dir):
        """Create a test configuration."""
        config_data = {
            "name": "test-prompt-manager",
            "version": "0.1.0",
            "description": "Test Prompt Manager",
            "paths": {
                "prompts": str(temp_prompts_dir)
            }
        }
        
        config_file = temp_prompts_dir.parent / "config.json"
        with open(config_file, "w") as f:
            json.dump(config_data, f)
            
        return MCPConfig(config_file=config_file)
    
    @pytest.fixture
    def sample_templates(self, temp_prompts_dir):
        """Create sample prompt templates."""
        templates = [
            {
                "name": "greeting",
                "description": "A simple greeting template",
                "template": "Hello, {{ name }}!",
                "variables": {
                    "name": {
                        "type": "string",
                        "description": "The name to greet"
                    }
                },
                "category": "general",
                "tags": ["greeting", "simple"]
            },
            {
                "name": "project-description",
                "description": "A template for describing projects",
                "template": "# {{ project_name }}\n\n{{ project_description }}\n\n## Features\n\n{{ features }}",
                "variables": {
                    "project_name": {
                        "type": "string",
                        "description": "The name of the project"
                    },
                    "project_description": {
                        "type": "string",
                        "description": "A brief description of the project"
                    },
                    "features": {
                        "type": "string",
                        "description": "Key features of the project"
                    }
                },
                "category": "documentation",
                "tags": ["project", "documentation"]
            }
        ]
        
        # Write templates to files
        for template in templates:
            template_file = temp_prompts_dir / f"{template['name']}.json"
            with open(template_file, "w") as f:
                json.dump(template, f)
                
        return templates
    
    @pytest.mark.asyncio
    async def test_prompt_loader_initialization(self, config, sample_templates):
        """Test that the prompt loader initializes properly."""
        loader = PromptLoader(config)
        await loader.initialize()
        
        # Check if templates were loaded
        assert "greeting" in loader.templates
        assert "project-description" in loader.templates
        
        # Check if categories and tags were extracted
        assert "general" in loader.categories
        assert "documentation" in loader.categories
        assert "greeting" in loader.tags
        assert "project" in loader.tags
        
    @pytest.mark.asyncio
    async def test_prompt_template_rendering(self, config, sample_templates):
        """Test that templates can be rendered properly."""
        loader = PromptLoader(config)
        await loader.initialize()
        
        greeting_template = loader.get_template("greeting")
        rendered = greeting_template.render({"name": "World"})
        assert rendered == "Hello, World!"
        
        project_template = loader.get_template("project-description")
        rendered = project_template.render({
            "project_name": "Test Project",
            "project_description": "A project for testing",
            "features": "- Feature 1\n- Feature 2"
        })
        assert "# Test Project" in rendered
        assert "A project for testing" in rendered
        assert "- Feature 1" in rendered
        assert "- Feature 2" in rendered
        
    @pytest.mark.asyncio
    async def test_prompt_manager_operations(self, config, sample_templates):
        """Test prompt manager operations."""
        manager = PromptManager(config)
        await manager.initialize()
        
        # Test loading template
        greeting = await manager.load_template("greeting")
        assert greeting is not None
        assert greeting.name == "greeting"
        
        # Test rendering template
        rendered = await manager.render_template("greeting", {"name": "World"})
        assert rendered == "Hello, World!"
        
        # Test creating a new template
        new_template = PromptTemplate(
            name="farewell",
            description="A farewell template",
            template="Goodbye, {{ name }}!",
            variables={
                "name": {
                    "type": "string",
                    "description": "The name to say goodbye to"
                }
            },
            category="general",
            tags=["farewell", "simple"]
        )
        
        await manager.create_template(new_template)
        
        # Test the new template was added
        farewell = await manager.load_template("farewell")
        assert farewell is not None
        assert farewell.name == "farewell"
        
        # Test rendering the new template
        rendered = await manager.render_template("farewell", {"name": "World"})
        assert rendered == "Goodbye, World!"
        
        # Test getting templates by category
        general_templates = manager.get_templates_by_category("general")
        assert len(general_templates) == 2
        assert "greeting" in [t.name for t in general_templates]
        assert "farewell" in [t.name for t in general_templates]
        
        # Test getting templates by tag
        simple_templates = manager.get_templates_by_tag("simple")
        assert len(simple_templates) == 2
        assert "greeting" in [t.name for t in simple_templates]
        assert "farewell" in [t.name for t in simple_templates]
        
        # Test deleting a template
        result = await manager.delete_template("greeting")
        assert result is True
        
        # Check if the template was deleted
        greeting = await manager.load_template("greeting")
        assert greeting is None 
```

--------------------------------------------------------------------------------
/data/prompts/templates/consolidated-interfaces-template.json:
--------------------------------------------------------------------------------

```json
{
  "id": "consolidated-interfaces-template",
  "name": "Consolidated TypeScript Interfaces Template",
  "description": "A template for creating a unified TypeScript interfaces file that consolidates related interfaces into a centralized location",
  "content": "/**\n * {{project_name}} - Unified Interface Definitions\n * \n * This file contains all interface definitions for the {{project_name}} project, \n * organized by domain and responsibility.\n */\n\n// ============================\n// Core Domain Interfaces\n// ============================\n\n/**\n * {{primary_entity}} interface\n * {{primary_entity_description}}\n */\nexport interface {{primary_entity}} {\n  /** Unique identifier */\n  id: string;\n  \n  /** Name for display purposes */\n  name: string;\n  \n  /** Optional description */\n  description?: string;\n  \n  /** Content or data */\n  content: string;\n  \n  /** Additional properties */\n  {{additional_properties}}\n  \n  /** Creation timestamp (ISO string) */\n  createdAt: string;\n  \n  /** Last update timestamp (ISO string) */\n  updatedAt: string;\n  \n  /** Version number, incremented on updates */\n  version: number;\n  \n  /** Optional metadata */\n  metadata?: Record<string, any>;\n}\n\n// ============================\n// Service Interfaces\n// ============================\n\n/**\n * {{service_name}} interface\n * Defines the contract for service operations on {{primary_entity}} objects\n */\nexport interface {{service_name}} {\n  /**\n   * Get a {{primary_entity}} by ID\n   * @param id {{primary_entity}} ID\n   * @returns The {{primary_entity}}\n   */\n  get{{primary_entity}}(id: string): Promise<{{primary_entity}}>;\n  \n  /**\n   * Add a new {{primary_entity}}\n   * @param data Partial {{primary_entity}} data\n   * @returns The created {{primary_entity}}\n   */\n  add{{primary_entity}}(data: Partial<{{primary_entity}}>): Promise<{{primary_entity}}>;\n  \n  /**\n   * Update an existing {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   * @param data Updated {{primary_entity}} data\n   * @returns The updated {{primary_entity}}\n   */\n  update{{primary_entity}}(id: string, data: Partial<{{primary_entity}}>): Promise<{{primary_entity}}>;\n  \n  /**\n   * List {{primary_entity}} objects with optional filtering\n   * @param options Filter options\n   * @returns Filtered list of {{primary_entity}} objects\n   */\n  list{{primary_entity}}s(options?: {{list_options_interface}}): Promise<{{primary_entity}}[]>;\n  \n  /**\n   * Delete a {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   */\n  delete{{primary_entity}}(id: string): Promise<void>;\n  \n  /**\n   * Additional service methods\n   */\n  {{additional_service_methods}}\n}\n\n// ============================\n// Storage Interfaces\n// ============================\n\n/**\n * Storage adapter interface for {{primary_entity}} persistence\n */\nexport interface StorageAdapter {\n  /**\n   * Connect to the storage\n   */\n  connect(): Promise<void>;\n  \n  /**\n   * Disconnect from the storage\n   */\n  disconnect(): Promise<void>;\n  \n  /**\n   * Check if connected to the storage\n   */\n  isConnected(): boolean | Promise<boolean>;\n  \n  /**\n   * Save a {{primary_entity}} to storage\n   * @param {{primary_entity_lowercase}} {{primary_entity}} to save\n   * @returns {{primary_entity}} ID or the full {{primary_entity}}\n   */\n  save{{primary_entity}}({{primary_entity_lowercase}}: Partial<{{primary_entity}}>): Promise<string | {{primary_entity}}>;\n  \n  /**\n   * Get a {{primary_entity}} by ID\n   * @param id {{primary_entity}} ID\n   * @returns {{primary_entity}}\n   */\n  get{{primary_entity}}(id: string): Promise<{{primary_entity}}>;\n  \n  /**\n   * Update a {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   * @param data Updated {{primary_entity}} data\n   * @returns Updated {{primary_entity}} or void\n   */\n  update{{primary_entity}}?(id: string, data: Partial<{{primary_entity}}>): Promise<{{primary_entity}} | void>;\n  \n  /**\n   * List {{primary_entity}} objects with filtering options\n   * @param options Filtering options\n   * @returns Array of {{primary_entity}} objects matching options\n   */\n  list{{primary_entity}}s(options?: {{list_options_interface}}): Promise<{{primary_entity}}[]>;\n  \n  /**\n   * Delete a {{primary_entity}}\n   * @param id {{primary_entity}} ID\n   */\n  delete{{primary_entity}}(id: string): Promise<void>;\n  \n  /**\n   * Clear all {{primary_entity}} objects\n   * Removes all {{primary_entity}} objects from storage\n   */\n  clearAll?(): Promise<void>;\n  \n  /**\n   * Additional storage methods\n   */\n  {{additional_storage_methods}}\n}\n\n// ============================\n// Configuration Interfaces\n// ============================\n\n/**\n * {{project_name}} configuration interface\n */\nexport interface {{config_interface_name}} {\n  /** Application name */\n  name: string;\n  \n  /** Application version */\n  version: string;\n  \n  /** Environment: production, development, etc. */\n  environment: string;\n  \n  /** Storage configuration */\n  storage: {\n    type: string;\n    path?: string;\n    connectionString?: string;\n  };\n  \n  /** Server configuration */\n  server: {\n    port: number;\n    host: string;\n    {{additional_server_config}}\n  };\n  \n  /** Logging configuration */\n  logging: {\n    level: 'debug' | 'info' | 'warn' | 'error';\n    {{additional_logging_config}}\n  };\n  \n  /** Additional configuration properties */\n  {{additional_config_properties}}\n}\n\n// ============================\n// Utility Types\n// ============================\n\n/**\n * Options for listing {{primary_entity}} objects\n */\nexport interface {{list_options_interface}} {\n  /** Filter options */\n  {{filter_options}}\n  \n  /** Pagination options */\n  offset?: number;\n  limit?: number;\n  \n  /** Sorting options */\n  sort?: string;\n  order?: 'asc' | 'desc';\n}\n\n/**\n * Error interface with additional context\n */\nexport interface ErrorWithContext extends Error {\n  /** Error code */\n  code?: string;\n  \n  /** HTTP status code */\n  statusCode?: number;\n  \n  /** Additional context object */\n  context?: Record<string, any>;\n  \n  /** Original error if this wraps another error */\n  originalError?: Error;\n}\n\n// ============================\n// Additional Interfaces\n// ============================\n\n{{additional_interfaces}}",
  "isTemplate": true,
  "variables": [
    "project_name",
    "primary_entity",
    "primary_entity_description",
    "primary_entity_lowercase",
    "additional_properties",
    "service_name",
    "list_options_interface",
    "additional_service_methods",
    "additional_storage_methods",
    "config_interface_name",
    "additional_server_config",
    "additional_logging_config",
    "additional_config_properties",
    "filter_options",
    "additional_interfaces"
  ],
  "tags": [
    "development",
    "typescript",
    "interfaces",
    "consolidation",
    "template"
  ],
  "category": "development",
  "createdAt": "2024-08-08T15:45:00.000Z",
  "updatedAt": "2024-08-08T15:45:00.000Z",
  "version": 1
} 
```

--------------------------------------------------------------------------------
/scripts/archive/init_claude_test.sh:
--------------------------------------------------------------------------------

```bash
#!/bin/bash
set -e

echo "Starting Claude Desktop Automated Test"

# First stop and cleanup all containers
echo "Cleaning up existing containers..."
containers=(
  "mcp-postgres-db-container"
  "pgai-vectorizer-worker"
  "mcp-prompt-manager-py"
  "mcp-prompts-sse"
  "mcp-prompts-stdio"
  "mcp-postgres-server"
)

for container in "${containers[@]}"; do
  echo "Stopping and removing container: $container"
  docker stop "$container" 2>/dev/null || true
  docker rm "$container" 2>/dev/null || true
done

# Kill Claude Desktop if running
echo "Killing Claude Desktop if running..."
pkill -f "Claude Desktop" || true
sleep 3  # Give it time to fully terminate

# Delete old logs
echo "Cleaning up old Claude Desktop logs..."
rm -rf /home/sparrow/.config/Claude/logs/*
mkdir -p /home/sparrow/.config/Claude/logs

# Initialize PostgreSQL
echo "Initializing PostgreSQL..."
./init_postgres.sh

# Ensure PostgreSQL is ready
echo "Ensuring PostgreSQL is fully ready..."
for i in {1..10}; do
  if docker exec -it mcp-postgres-db-container pg_isready -U postgres > /dev/null 2>&1; then
    echo "PostgreSQL is ready!"
    break
  fi
  echo "Waiting for PostgreSQL to be ready (attempt $i/10)..."
  sleep 3
done

# Create directory for prompt-manager if it doesn't exist
echo "Creating directory structure for prompt-manager..."
mkdir -p /home/sparrow/mcp/data/prompts

# Add a sample prompt template if directory is empty
if [ ! "$(ls -A /home/sparrow/mcp/data/prompts)" ]; then
  echo "Adding a sample prompt template..."
  cat > /home/sparrow/mcp/data/prompts/sample-template.json << EOF
{
  "id": "sample-template",
  "name": "Sample Template",
  "description": "A sample prompt template",
  "content": "This is a sample template with a {{variable}}",
  "isTemplate": true,
  "variables": ["variable"],
  "tags": ["sample"],
  "createdAt": "$(date -Iseconds)",
  "updatedAt": "$(date -Iseconds)",
  "version": 1
}
EOF
fi

# Start the mcp-prompts-sse and mcp-prompts-stdio containers manually first
echo "Starting prompts-sse container..."
docker run -d --rm -i --network=host \
  -v /home/sparrow/mcp/data/prompts:/app/prompts \
  -v /home/sparrow/mcp/data/backups:/app/backups \
  --name mcp-prompts-sse \
  -e STORAGE_TYPE=postgres \
  -e PROMPTS_DIR=/app/prompts \
  -e BACKUPS_DIR=/app/backups \
  -e HTTP_SERVER=true \
  -e PORT=3003 \
  -e HOST=0.0.0.0 \
  -e ENABLE_SSE=true \
  -e SSE_PORT=3003 \
  -e SSE_PATH=/sse \
  -e CORS_ORIGIN="*" \
  -e DEBUG="mcp:*" \
  -e POSTGRES_HOST=localhost \
  -e POSTGRES_PORT=5432 \
  -e POSTGRES_DATABASE=prompts \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=password \
  sparesparrow/mcp-prompts:latest --sse --port=3003 --path=/sse

echo "Starting prompts-stdio container..."
docker run -d --rm -i --network=host \
  -v /home/sparrow/mcp/data/prompts:/app/prompts \
  -v /home/sparrow/mcp/data/backups:/app/backups \
  --name mcp-prompts-stdio \
  -e STORAGE_TYPE=postgres \
  -e PROMPTS_DIR=/app/prompts \
  -e BACKUPS_DIR=/app/backups \
  -e ENABLE_MCP=true \
  -e DEBUG="mcp:*" \
  -e POSTGRES_HOST=localhost \
  -e POSTGRES_PORT=5432 \
  -e POSTGRES_DATABASE=prompts \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=password \
  sparesparrow/mcp-prompts:latest --stdio

echo "Starting prompt-manager-py container..."
# First check if prompt-manager image exists
if ! docker image inspect prompt-manager:latest >/dev/null 2>&1; then
  echo "Error: prompt-manager:latest image not found. Please build the image first."
  echo "Attempting to pull from Docker Hub as fallback..."
  docker pull sparesparrow/prompt-manager:latest && \
  docker tag sparesparrow/prompt-manager:latest prompt-manager:latest || \
  { echo "Failed to get prompt-manager image. Continuing without prompt-manager."; }
fi

# Now start the container with restart policy and error handling
docker run -d --restart=on-failure:5 --network=host \
  -v /home/sparrow/mcp/data/prompts:/data/prompts \
  --name mcp-prompt-manager-py \
  -e MCP_PROMPT_MANAGER_NAME=prompt-manager-py \
  -e MCP_PROMPT_MANAGER_LOG_LEVEL=debug \
  -e MCP_PROMPT_MANAGER_TEMPLATE_DIR=/data/prompts/ \
  -e MCP_PROMPT_MANAGER_PERSISTENCE=true \
  -e MCP_PROMPT_MANAGER_PERSISTENCE_FILE=/data/prompts/prompt-templates.json \
  -e PYTHONPATH=. \
  prompt-manager:latest --storage-dir /data/prompts

# Check if prompt-manager started properly
sleep 5
if ! docker ps | grep -q mcp-prompt-manager-py; then
  echo "Error: prompt-manager-py container failed to start. Checking logs:"
  docker logs mcp-prompt-manager-py || echo "Could not retrieve logs"
  
  echo "Attempting to start without depending on prompts-sse..."
  docker run -d --restart=on-failure:5 --network=host \
    -v /home/sparrow/mcp/data/prompts:/data/prompts \
    --name mcp-prompt-manager-py \
    -e MCP_PROMPT_MANAGER_NAME=prompt-manager-py \
    -e MCP_PROMPT_MANAGER_LOG_LEVEL=debug \
    -e MCP_PROMPT_MANAGER_TEMPLATE_DIR=/data/prompts/ \
    -e MCP_PROMPT_MANAGER_PERSISTENCE=true \
    -e MCP_PROMPT_MANAGER_PERSISTENCE_FILE=/data/prompts/prompt-templates.json \
    -e PYTHONPATH=. \
    -e MCP_PROMPT_MANAGER_STANDALONE=true \
    prompt-manager:latest --storage-dir /data/prompts --standalone
fi

echo "Starting mcp-postgres-server..."
docker run -d --restart=on-failure:5 --network=host \
  --name mcp-postgres-server \
  -e POSTGRES_CONNECTION_STRING=postgresql://postgres:password@localhost:5432/postgres \
  mcp/postgres postgresql://postgres:password@localhost:5432/postgres

# Wait for all containers to initialize
echo "Waiting for all MCP servers to initialize..."
sleep 15

# Display running containers
echo "Currently running containers:"
docker ps

# Run Claude Desktop with increased timeouts
echo "Starting Claude Desktop..."
ADDITIONAL_ENV="MCP_DEFAULT_TIMEOUT=180000 DEBUG=mcp:*" ~/bin/run-claude.sh &
CLAUDE_PID=$!

# Longer wait time before checking
echo "Waiting for two minutes..."
sleep 120

# Kill Claude Desktop
echo "Killing Claude Desktop..."
kill $CLAUDE_PID || true
sleep 5

# Check logs and containers
echo "Checking if MCP servers are running..."
docker ps | grep -E "postgres|prompt|pgai"

echo "Checking pgai functionality..."
docker exec -it mcp-postgres-db-container psql -U postgres -c "SELECT version();"
docker exec -it mcp-postgres-db-container psql -U postgres -c "SELECT * FROM pg_extension WHERE extname = 'ai';"

echo "Checking prompt-manager functionality..."
if docker ps | grep -q mcp-prompt-manager-py; then
  echo "✅ prompt-manager-py is running"
else
  echo "❌ prompt-manager-py is NOT running. Starting it again..."
  docker run -d --restart=on-failure:5 --network=host \
    -v /home/sparrow/mcp/data/prompts:/data/prompts \
    --name mcp-prompt-manager-py \
    -e MCP_PROMPT_MANAGER_NAME=prompt-manager-py \
    -e MCP_PROMPT_MANAGER_LOG_LEVEL=debug \
    -e MCP_PROMPT_MANAGER_TEMPLATE_DIR=/data/prompts/ \
    -e MCP_PROMPT_MANAGER_PERSISTENCE=true \
    -e MCP_PROMPT_MANAGER_PERSISTENCE_FILE=/data/prompts/prompt-templates.json \
    -e PYTHONPATH=. \
    -e MCP_PROMPT_MANAGER_STANDALONE=true \
    prompt-manager:latest --storage-dir /data/prompts --standalone
fi

echo "Test completed. You can now run Claude Desktop normally." 
```

--------------------------------------------------------------------------------
/data/prompts/templates/template-based-mcp-integration.json:
--------------------------------------------------------------------------------

```json
{
  "id": "template-based-mcp-integration",
  "name": "Template-Based MCP Integration",
  "description": "A powerful template that integrates multiple MCP servers for enhanced AI capabilities, designed for flexible use across different domains and tasks",
  "content": "# Template-Based MCP Integration Guide\n\nYou are an AI assistant enhanced with multiple MCP server capabilities to provide contextually rich assistance for {{domain}} tasks. Your goal is to leverage various MCP resources to deliver comprehensive and accurate responses for {{specific_task}}.\n\n## Available MCP Resources and Their Uses\n\n### Filesystem Resources (`@modelcontextprotocol/server-filesystem`)\n```\n@filesystem:/path/to/file\n```\nUse filesystem resources to:\n- Access local code files for analysis\n- Read documentation stored locally\n- Process configuration files\n- Import templates or structured data\n\n### Memory Resources (`@modelcontextprotocol/server-memory`)\n```\n@memory:session/{{session_id}}\n```\nUse memory resources to:\n- Maintain conversational context across interactions\n- Store intermediate results for complex analyses\n- Cache frequently accessed data\n- Track progress through multi-step workflows\n\n### GitHub Resources (`@modelcontextprotocol/server-github`)\n```\n@github:{{owner}}/{{repo}}/{{branch}}/{{path}}\n```\nUse GitHub resources to:\n- Access remote repository content\n- Compare versions of code or documentation\n- Analyze pull requests and issues\n- Understand project structure and dependencies\n\n### Sequential Thinking Resources (`@modelcontextprotocol/server-sequential-thinking`)\n```\n@sequential-thinking:{{thinking_id}}\n```\nUse sequential thinking to:\n- Break down complex problems into logical steps\n- Document your reasoning process\n- Validate solutions systematically\n- Explore multiple approaches before committing\n\n### Audio Integration Resources (`elevenlabs-mcp-server`)\n```\n@elevenlabs:{{text_to_speak}}\n```\nUse audio integration to:\n- Convert responses to speech for accessibility\n- Create voice prompts for guided tutorials\n- Generate narration for educational content\n- Provide audio feedback on analysis results\n\n## Integration Approaches\n\n### Multi-Resource Context Analysis\nFor complex tasks requiring multiple data sources:\n\n```\nI'll analyze {{topic}} by combining:\n1. Code structure from @filesystem:{{project_path}}\n2. Historical context from @github:{{repo_details}}\n3. Previous findings from @memory:session/{{session_id}}\n4. Step-by-step reasoning with @sequential-thinking:analysis\n```\n\n### Template-Variable Mapping with Resources\nMap template variables to specific resource URIs for dynamic content integration:\n\n```\n{{#each resource_paths}}\n  @{{resource_type}}:{{resource_uri}}\n{{/each}}\n```\n\n### Progressive Resource Loading\nFor large projects with multiple files:\n\n```\n1. First, examine project structure: @github:{{repo}}/structure\n2. Then, analyze specific components:\n   {{#each component_paths}}\n   - @filesystem:{{this}}\n   {{/each}}\n3. Finally, integrate findings using: @sequential-thinking:synthesis\n```\n\n## {{domain}}-Specific Integration Patterns\n\n### Configuration for {{domain}}\n{{domain_config}}\n\n### Specialized Techniques for {{specific_task}}\n{{specialized_techniques}}\n\n## Template Composition with MCP Resources\n\nHere's how to structure your analysis for {{specific_task}} using MCP resources:\n\n```\n# {{specific_task}} Analysis\n\n## Context Information\n{{context_description}}\n{{#if has_code_context}}\nReferenced code: @filesystem:{{code_path}}\n{{/if}}\n{{#if has_github_context}}\nRepository insights: @github:{{repo_path}}\n{{/if}}\n\n## Analysis Approach\n1. {{step_1_description}}\n   {{#if step_1_needs_memory}}\n   Using context from: @memory:{{memory_path_1}}\n   {{/if}}\n2. {{step_2_description}}\n   {{#if step_2_needs_thinking}}\n   Reasoning process: @sequential-thinking:{{thinking_id_2}}\n   {{/if}}\n3. {{step_3_description}}\n   {{#if step_3_has_audio}}\n   Audio explanation: @elevenlabs:{{audio_description}}\n   {{/if}}\n\n## Output Format\n{{output_format_description}}\n```\n\n## Best Practices for Template-Based MCP Integration\n\n1. **Resource Prioritization**: Order resources from most general to most specific\n2. **Error Handling**: Include fallback options if certain resources are unavailable\n3. **Progressive Enhancement**: Start with basic text and enhance with MCP resources\n4. **Cross-Resource Validation**: Compare data across multiple resources for accuracy\n5. **Contextual Relevance**: Only integrate resources that directly contribute to the task\n6. **Modular Templates**: Design templates with reusable resource integration patterns\n7. **Custom Validators**: Create domain-specific validation rules for resource data\n\n## Implementation Examples\n\n### Example 1: Code Review Template with GitHub and Filesystem Integration\n```\n# Code Review for {{repository_name}}\n\n## Repository Context\n@github:{{owner}}/{{repository_name}}/stats\n\n## Pull Request Details\n@github:{{owner}}/{{repository_name}}/pulls/{{pr_number}}\n\n## Files to Review\n{{#each files_to_review}}\n@filesystem:{{this}}\n{{/each}}\n\n## Previous Reviews Context\n@memory:codereviews/{{repository_name}}\n\n## Review Process\n@sequential-thinking:code-review-{{pr_number}}\n\n## Output Format\n- Summary of changes\n- Code quality assessment\n- Security considerations\n- Performance impact\n- Recommendations\n```\n\n### Example 2: {{domain}} Solution Template\n{{domain_example}}\n\n## Conclusion\n\nBy effectively combining template-based prompting with MCP resource integration, you can create sophisticated, context-aware AI interactions that deliver more accurate, personalized, and comprehensive results for {{specific_task}} in the {{domain}} domain.\n\nWhat specific template would you like to develop with MCP resource integration today?",
  "isTemplate": true,
  "variables": [
    "domain",
    "specific_task",
    "session_id",
    "topic",
    "project_path",
    "repo_details",
    "resource_type",
    "resource_uri",
    "resource_paths",
    "repo",
    "component_paths",
    "domain_config",
    "specialized_techniques",
    "context_description",
    "has_code_context",
    "code_path",
    "has_github_context",
    "repo_path",
    "step_1_description",
    "step_1_needs_memory",
    "memory_path_1",
    "step_2_description",
    "step_2_needs_thinking",
    "thinking_id_2",
    "step_3_description",
    "step_3_has_audio",
    "audio_description",
    "output_format_description",
    "repository_name",
    "owner",
    "pr_number",
    "files_to_review",
    "domain_example",
    "thinking_id"
  ],
  "tags": [
    "template",
    "mcp-integration",
    "multi-server",
    "resources",
    "advanced-prompting",
    "docker"
  ],
  "createdAt": "2025-03-15T20:00:00.000Z",
  "updatedAt": "2025-03-15T20:00:00.000Z",
  "version": 1,
  "metadata": {
    "recommended_servers": [
      "@modelcontextprotocol/server-filesystem",
      "@modelcontextprotocol/server-memory",
      "@modelcontextprotocol/server-github",
      "@modelcontextprotocol/server-sequential-thinking",
      "elevenlabs-mcp-server"
    ],
    "example_values": {
      "domain": "software development",
      "specific_task": "code refactoring",
      "session_id": "refactoring-session-123",
      "project_path": "/home/user/projects/myapp",
      "repo_details": "username/repo-name",
      "domain_config": "For software development, focus on maintainability, performance, and security aspects of code.",
      "specialized_techniques": "For code refactoring, employ design patterns recognition, complexity analysis, and dependency mapping."
    }
  }
} 
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/templates/manager.py:
--------------------------------------------------------------------------------

```python
"""Template manager for MCP Project Orchestrator.

This module provides the TemplateManager class that handles template discovery,
loading, and management of project and component templates.
"""

import json
from pathlib import Path
from typing import Dict, List, Optional, Union, Any

from ..core.base import BaseManager, BaseComponent
from ..core.config import Config
from ..core.exceptions import TemplateError
from .project import ProjectTemplate
from .component import ComponentTemplate


class TemplateManager(BaseManager):
    """Manager for project and component templates."""

    def __init__(self, config: Config):
        """Initialize the template manager.

        Args:
            config: Configuration instance
        """
        super().__init__()
        self.config = config
        self.project_templates: Dict[str, ProjectTemplate] = {}
        self.component_templates: Dict[str, ComponentTemplate] = {}

    async def initialize(self) -> None:
        """Initialize the template manager.

        This method discovers and loads available templates.
        """
        await self.discover_templates()

    async def discover_templates(self) -> None:
        """Discover and load available templates."""
        # Discover project templates
        project_templates_dir = self.config.get_template_path("projects")
        if project_templates_dir.exists():
            for template_dir in project_templates_dir.iterdir():
                if template_dir.is_dir():
                    try:
                        template = await self._load_project_template(template_dir)
                        self.project_templates[template.name] = template
                    except Exception as e:
                        raise TemplateError(
                            f"Failed to load project template {template_dir.name}",
                            str(template_dir)
                        ) from e

        # Discover component templates
        component_templates_dir = self.config.get_template_path("components")
        if component_templates_dir.exists():
            for template_dir in component_templates_dir.iterdir():
                if template_dir.is_dir():
                    try:
                        template = await self._load_component_template(template_dir)
                        self.component_templates[template.name] = template
                    except Exception as e:
                        raise TemplateError(
                            f"Failed to load component template {template_dir.name}",
                            str(template_dir)
                        ) from e

    async def _load_project_template(self, template_dir: Path) -> ProjectTemplate:
        """Load a project template from a directory.

        Args:
            template_dir: Directory containing the template

        Returns:
            ProjectTemplate: Loaded project template
        """
        metadata_file = template_dir / "template.json"
        if not metadata_file.exists():
            raise TemplateError(
                f"Template metadata file not found: {metadata_file}",
                str(template_dir)
            )

        with open(metadata_file) as f:
            metadata = json.load(f)

        return ProjectTemplate(
            name=metadata.get("name", template_dir.name),
            description=metadata.get("description", ""),
            version=metadata.get("version", "0.1.0"),
            author=metadata.get("author", ""),
            template_dir=template_dir,
            variables=metadata.get("variables", {}),
            files=metadata.get("files", []),
            hooks=metadata.get("hooks", {})
        )

    async def _load_component_template(self, template_dir: Path) -> ComponentTemplate:
        """Load a component template from a directory.

        Args:
            template_dir: Directory containing the template

        Returns:
            ComponentTemplate: Loaded component template
        """
        metadata_file = template_dir / "template.json"
        if not metadata_file.exists():
            raise TemplateError(
                f"Template metadata file not found: {metadata_file}",
                str(template_dir)
            )

        with open(metadata_file) as f:
            metadata = json.load(f)

        return ComponentTemplate(
            name=metadata.get("name", template_dir.name),
            description=metadata.get("description", ""),
            version=metadata.get("version", "0.1.0"),
            author=metadata.get("author", ""),
            template_dir=template_dir,
            variables=metadata.get("variables", {}),
            files=metadata.get("files", []),
            dependencies=metadata.get("dependencies", [])
        )

    async def get_project_template(self, name: str) -> Optional[ProjectTemplate]:
        """Get a project template by name.

        Args:
            name: Name of the template

        Returns:
            Optional[ProjectTemplate]: The template if found, None otherwise
        """
        return self.project_templates.get(name)

    async def get_component_template(self, name: str) -> Optional[ComponentTemplate]:
        """Get a component template by name.

        Args:
            name: Name of the template

        Returns:
            Optional[ComponentTemplate]: The template if found, None otherwise
        """
        return self.component_templates.get(name)

    async def list_project_templates(self) -> List[Dict[str, Any]]:
        """List all available project templates.

        Returns:
            List[Dict[str, Any]]: List of template metadata
        """
        return [
            {
                "name": template.name,
                "description": template.description,
                "version": template.version,
                "author": template.author,
            }
            for template in self.project_templates.values()
        ]

    async def list_component_templates(self) -> List[Dict[str, Any]]:
        """List all available component templates.

        Returns:
            List[Dict[str, Any]]: List of template metadata
        """
        return [
            {
                "name": template.name,
                "description": template.description,
                "version": template.version,
                "author": template.author,
            }
            for template in self.component_templates.values()
        ]

    async def apply_project_template(
        self,
        template_name: str,
        target_dir: Union[str, Path],
        variables: Dict[str, Any]
    ) -> None:
        """Apply a project template to a target directory.

        Args:
            template_name: Name of the template to apply
            target_dir: Target directory for the project
            variables: Template variables
        """
        template = await self.get_project_template(template_name)
        if not template:
            raise TemplateError(f"Project template not found: {template_name}")

        await template.apply(Path(target_dir), variables)

    async def apply_component_template(
        self,
        template_name: str,
        target_dir: Union[str, Path],
        variables: Dict[str, Any]
    ) -> None:
        """Apply a component template to a target directory.

        Args:
            template_name: Name of the template to apply
            target_dir: Target directory for the component
            variables: Template variables
        """
        template = await self.get_component_template(template_name)
        if not template:
            raise TemplateError(f"Component template not found: {template_name}")

        await template.apply(Path(target_dir), variables) 
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/prompts/manager.py:
--------------------------------------------------------------------------------

```python
"""Prompt manager for MCP Project Orchestrator.

This module provides the PromptManager class that handles prompt template
discovery, loading, and management.
"""

import json
from pathlib import Path
from typing import Dict, List, Optional, Union, Any

from ..core.base import BaseManager
from ..core.config import Config
from ..core.exceptions import PromptError
from .template import PromptTemplate
from .category import PromptCategory
from .version import PromptVersion


class PromptManager(BaseManager):
    """Manager for prompt templates."""

    def __init__(self, config: Config):
        """Initialize prompt manager.

        Args:
            config: Configuration instance
        """
        super().__init__()
        self.config = config
        self.prompts: Dict[str, PromptTemplate] = {}
        self.categories: Dict[str, PromptCategory] = {}

    async def initialize(self) -> None:
        """Initialize the prompt manager.

        This method discovers and loads available prompts.
        """
        await self.discover_prompts()
        await self.load_categories()

    async def discover_prompts(self) -> None:
        """Discover and load available prompts."""
        prompts_dir = self.config.get_prompt_path()
        if not prompts_dir.exists():
            return

        for prompt_file in prompts_dir.rglob("*.json"):
            try:
                prompt = await self._load_prompt(prompt_file)
                self.prompts[prompt.name] = prompt
            except Exception as e:
                raise PromptError(
                    f"Failed to load prompt {prompt_file.name}",
                    str(prompt_file)
                ) from e

    async def load_categories(self) -> None:
        """Load prompt categories."""
        categories_file = self.config.get_prompt_path("categories.json")
        if not categories_file.exists():
            return

        try:
            with open(categories_file) as f:
                categories_data = json.load(f)

            for category_data in categories_data:
                category = PromptCategory(
                    name=category_data["name"],
                    description=category_data.get("description", ""),
                    prompts=category_data.get("prompts", [])
                )
                self.categories[category.name] = category
        except Exception as e:
            raise PromptError(
                "Failed to load prompt categories",
                str(categories_file)
            ) from e

    async def _load_prompt(self, prompt_file: Path) -> PromptTemplate:
        """Load a prompt template from a file.

        Args:
            prompt_file: Path to prompt file

        Returns:
            PromptTemplate: Loaded prompt template

        Raises:
            PromptError: If loading fails
        """
        try:
            with open(prompt_file) as f:
                data = json.load(f)

            version = PromptVersion(
                major=data.get("version", {}).get("major", 1),
                minor=data.get("version", {}).get("minor", 0),
                patch=data.get("version", {}).get("patch", 0)
            )

            return PromptTemplate(
                name=data.get("name", prompt_file.stem),
                description=data.get("description", ""),
                version=version,
                author=data.get("author", ""),
                template=data.get("template", ""),
                variables=data.get("variables", {}),
                category=data.get("category", "general"),
                tags=data.get("tags", [])
            )
        except Exception as e:
            raise PromptError(
                f"Failed to load prompt file {prompt_file}",
                str(prompt_file)
            ) from e

    async def get_prompt(self, name: str) -> Optional[PromptTemplate]:
        """Get a prompt template by name.

        Args:
            name: Name of the prompt

        Returns:
            Optional[PromptTemplate]: The prompt if found, None otherwise
        """
        return self.prompts.get(name)

    async def get_category(self, name: str) -> Optional[PromptCategory]:
        """Get a prompt category by name.

        Args:
            name: Name of the category

        Returns:
            Optional[PromptCategory]: The category if found, None otherwise
        """
        return self.categories.get(name)

    async def list_prompts(self, category: Optional[str] = None) -> List[Dict[str, Any]]:
        """List all available prompts.

        Args:
            category: Optional category to filter by

        Returns:
            List[Dict[str, Any]]: List of prompt metadata
        """
        prompts = self.prompts.values()
        if category:
            prompts = [p for p in prompts if p.category == category]

        return [
            {
                "name": prompt.name,
                "description": prompt.description,
                "version": str(prompt.version),
                "author": prompt.author,
                "category": prompt.category,
                "tags": prompt.tags,
            }
            for prompt in prompts
        ]

    async def list_categories(self) -> List[Dict[str, Any]]:
        """List all available categories.

        Returns:
            List[Dict[str, Any]]: List of category metadata
        """
        return [
            {
                "name": category.name,
                "description": category.description,
                "prompt_count": len(category.prompts),
            }
            for category in self.categories.values()
        ]

    async def render_prompt(
        self,
        name: str,
        variables: Dict[str, Any],
        version: Optional[str] = None
    ) -> str:
        """Render a prompt template with variables.

        Args:
            name: Name of the prompt
            variables: Template variables
            version: Optional specific version to use

        Returns:
            str: Rendered prompt

        Raises:
            PromptError: If prompt not found or rendering fails
        """
        prompt = await self.get_prompt(name)
        if not prompt:
            raise PromptError(f"Prompt not found: {name}")

        if version:
            if str(prompt.version) != version:
                raise PromptError(
                    f"Version mismatch: requested {version}, found {prompt.version}"
                )

        try:
            return await prompt.render(variables)
        except Exception as e:
            raise PromptError(
                f"Failed to render prompt {name}",
                name
            ) from e

    async def save_prompt(self, prompt: PromptTemplate) -> None:
        """Save a prompt template.

        Args:
            prompt: Prompt template to save

        Raises:
            PromptError: If saving fails
        """
        prompt_file = self.config.get_prompt_path(f"{prompt.name}.json")
        try:
            data = {
                "name": prompt.name,
                "description": prompt.description,
                "version": {
                    "major": prompt.version.major,
                    "minor": prompt.version.minor,
                    "patch": prompt.version.patch,
                },
                "author": prompt.author,
                "template": prompt.template,
                "variables": prompt.variables,
                "category": prompt.category,
                "tags": prompt.tags,
            }

            with open(prompt_file, "w") as f:
                json.dump(data, f, indent=2)

            self.prompts[prompt.name] = prompt
        except Exception as e:
            raise PromptError(
                f"Failed to save prompt {prompt.name}",
                str(prompt_file)
            ) from e 
```

--------------------------------------------------------------------------------
/data/prompts/templates/mcp-template-system.json:
--------------------------------------------------------------------------------

```json
{
  "name": "mcp-template-system",
  "version": "1.0.0",
  "description": "A sophisticated template-based prompt system that leverages multiple MCP servers and resources for enhanced AI interactions.",
  "prompt_text": "# MCP Template System - Multi-Server Integration\n\nYou are an AI assistant with access to multiple MCP (Model Context Protocol) servers. Your role is to integrate information from various MCP resources to provide comprehensive, context-aware responses. This template system orchestrates interactions across these resources.\n\n## Available MCP Resources:\n\n- **MCP Filesystem** (@file:// URIs): Access to files and directories\n- **MCP Memory** (@memory:// URIs): Access to stored variables and contexts\n- **MCP GitHub** (@github:// URIs): Access to repositories, issues, and PRs\n- **MCP Sequential Thinking** (@thinking:// URIs): Step-by-step reasoning chains\n- **MCP ElevenLabs** (@voice:// URIs): Text-to-speech capabilities\n- **MCP PGAI** (@pgai:// URIs): Vector database embeddings and semantic search\n\n## Resource Referencing Syntax:\n\nWhen working with resources, use the format: `@resource-type://resource-path`\n\nExamples:\n- `@file:///home/user/documents/project.md`\n- `@memory://session/last_variables`\n- `@github://user/repo/blob/main/README.md`\n- `@thinking://chain/problem-solving`\n- `@voice://description/project-overview`\n- `@pgai://collection/similar-templates?query=docker`\n\n## Template Variables:\n\nThis template accepts the following variables:\n\n- `{{context}}`: The primary context for this interaction\n- `{{resource_paths}}`: Comma-separated list of resource URIs to include\n- `{{analysis_depth}}`: Level of detail for analysis (basic, standard, detailed)\n- `{{output_format}}`: Desired output format (text, markdown, json)\n- `{{task_type}}`: Type of task (summarize, analyze, create, modify)\n- `{{sequential_steps}}`: Whether to use sequential thinking (true/false)\n\n## Integration Flow:\n\n1. **Context Loading**: Load the primary context from `{{context}}`\n2. **Resource Collection**: Gather all resources specified in `{{resource_paths}}`\n3. **Memory Integration**: Check for relevant variables in Memory server\n4. **Analysis Process**:\n   - If `{{sequential_steps}}` is true, use Sequential Thinking server\n   - Otherwise, process directly\n5. **Output Generation**: Format according to `{{output_format}}`\n6. **Feedback Loop**: Store results in Memory server for future reference\n\n## Expected Usage Pattern:\n\n```javascript\n// Example integration usage\nconst response = await mcpPrompts.applyTemplate('mcp-template-system', {\n  context: 'Project refactoring analysis',\n  resource_paths: '@file:///project/src/, @github://org/repo/issues',\n  analysis_depth: 'detailed',\n  output_format: 'markdown',\n  task_type: 'analyze',\n  sequential_steps: true\n});\n```\n\n## Response Structure:\n\nBased on the provided variables, your response should:\n\n1. Begin with a clear understanding of the task and context\n2. Reference the integrated resources specifically\n3. Structure the analysis according to `{{analysis_depth}}`\n4. Format the output according to `{{output_format}}`\n5. Follow the specified `{{task_type}}` objective\n6. If `{{sequential_steps}}` is true, show your chain of thought\n\n## MCP-Resource Integration Techniques:\n\n- Use `@resource-uri` syntax inline when referencing specific resources\n- Combine information from multiple resources to form a cohesive response\n- Leverage Memory server to maintain context across interactions\n- Use Sequential Thinking for complex problems that benefit from step-by-step reasoning\n- Utilize PGAI for semantic search to find related content\n- Incorporate GitHub resource references for code examples and documentation\n\n{{context}}",
  "variables": [
    "context",
    "resource_paths",
    "analysis_depth",
    "output_format",
    "task_type",
    "sequential_steps"
  ],
  "tags": [
    "mcp-integration",
    "template-system",
    "multi-server",
    "advanced-prompting",
    "resource-linking"
  ],
  "examples": [
    {
      "name": "Code Analysis Example",
      "variables": {
        "context": "Analyze the performance implications of this database query implementation",
        "resource_paths": "@file:///project/src/database/queries.js, @github://org/repo/issues/42",
        "analysis_depth": "detailed",
        "output_format": "markdown",
        "task_type": "analyze",
        "sequential_steps": "true"
      },
      "expected_response": "# Database Query Performance Analysis\n\n## Overview\nI've analyzed the performance implications of the database query implementation from the provided resources.\n\n## Resources Examined\n- Source code: `@file:///project/src/database/queries.js`\n- Related issue: `@github://org/repo/issues/42`\n\n## Sequential Analysis\n1. First, I examined the query structure in the source file\n2. Next, I identified potential bottlenecks in the JOIN operations\n3. Then, I cross-referenced with the GitHub issue discussing similar performance concerns\n4. Finally, I evaluated indexing strategies based on the query patterns\n\n## Performance Findings\n\n### Query Structure Issues\n- The query uses multiple nested JOINs without proper indexing\n- Table scans are occurring due to missing WHERE clause optimizations\n- Prepared statements aren't being used consistently\n\n### Recommendations\n1. Add indexes to columns used in JOIN and WHERE clauses\n2. Refactor to use prepared statements throughout\n3. Consider denormalizing specific tables for query patterns\n4. Implement connection pooling as mentioned in issue #42\n\n## Conclusion\nThe current implementation has significant performance bottlenecks that can be addressed through proper indexing and query restructuring."
    },
    {
      "name": "Project Architecture Summary",
      "variables": {
        "context": "Summarize the architecture of this project and suggest improvements",
        "resource_paths": "@file:///project/README.md, @file:///project/architecture.md, @memory://project/previous_suggestions",
        "analysis_depth": "standard",
        "output_format": "markdown",
        "task_type": "summarize",
        "sequential_steps": "false"
      },
      "expected_response": "# Project Architecture Summary\n\nBased on the examined resources (`@file:///project/README.md`, `@file:///project/architecture.md`) and previous suggestions (`@memory://project/previous_suggestions`), here's a summary of the current architecture:\n\n## Current Architecture\n\n- **Frontend**: React with Redux state management\n- **Backend**: Node.js Express API\n- **Database**: PostgreSQL with Sequelize ORM\n- **Authentication**: JWT-based auth flow\n- **Deployment**: Docker containers orchestrated with Kubernetes\n\n## Suggested Improvements\n\n1. **API Layer**: Consider implementing GraphQL for more flexible data fetching\n2. **Caching Strategy**: Add Redis for performance-critical endpoints\n3. **Testing Coverage**: Expand unit and integration tests (currently at 65%)\n4. **Monitoring**: Implement comprehensive logging and monitoring solution\n5. **CI/CD Pipeline**: Enhance automated testing in deployment pipeline\n\nThese suggestions align with the previous recommendations stored in the memory resource while addressing new architectural elements discovered in the README and architecture documents."
    }
  ],
  "metadata": {
    "created_at": "2023-05-15T12:00:00Z",
    "updated_at": "2023-05-15T12:00:00Z",
    "author": "MCP-Prompts Team",
    "category": "advanced-integration",
    "mcp_requirements": [
      "MCP Memory Server",
      "MCP Filesystem Server",
      "MCP GitHub Server",
      "MCP Sequential Thinking Server",
      "MCP ElevenLabs Server",
      "PostgreSQL AI Server"
    ],
    "resource_types": [
      "file",
      "memory",
      "github",
      "thinking",
      "voice",
      "pgai"
    ]
  }
} 
```

--------------------------------------------------------------------------------
/mcp-project-orchestrator/openssl/test_deployment.py:
--------------------------------------------------------------------------------

```python
#!/usr/bin/env python3
"""
Test script for Cursor configuration deployment.

This script tests the basic functionality of the Cursor configuration deployer.
"""

import tempfile
import shutil
from pathlib import Path
import sys
import os

# Add the package to the Python path
sys.path.insert(0, str(Path(__file__).parent))

from mcp_orchestrator.cursor_deployer import CursorConfigDeployer
from mcp_orchestrator.platform_detector import PlatformDetector


def create_test_templates(package_root):
    """Create test template files."""
    templates_dir = package_root / "cursor-rules"
    templates_dir.mkdir(parents=True)
    
    # Create rules directory
    rules_dir = templates_dir / "rules"
    rules_dir.mkdir(parents=True)
    
    # Create prompts directory
    prompts_dir = templates_dir / "prompts"
    prompts_dir.mkdir(parents=True)
    
    # Create shared rule template
    shared_template = rules_dir / "shared.mdc.jinja2"
    shared_template.write_text("""---
title: Shared Rules
description: Common rules for all platforms
created: {{ timestamp }}
platform: shared
user: {{ user }}
---

# Shared Rules

This is a test shared rule template.
Platform: {{ os }}
User: {{ user }}
""")
    
    # Create Linux rule template
    linux_template = rules_dir / "linux-dev.mdc.jinja2"
    linux_template.write_text("""---
title: Linux Development Rules
description: Linux-specific development rules
created: {{ timestamp }}
platform: linux
user: {{ user }}
---

# Linux Development Rules

This is a test Linux rule template.
OS: {{ os }}
Architecture: {{ architecture }}
""")
    
    # Create prompt template
    prompt_template = prompts_dir / "test-prompt.md.jinja2"
    prompt_template.write_text("""# Test Prompt

This is a test prompt template.
Platform: {{ os }}
User: {{ user }}
""")
    
    # Create MCP config template
    mcp_template = templates_dir / "mcp.json.jinja2"
    mcp_template.write_text("""{
  "mcpServers": {
    "test-server": {
      "command": "{{ platform_detector.get_mcp_command() }}",
      "args": ["-y", "@test/mcp-server"],
      "env": {
        "PLATFORM": "{{ os }}",
        "USER": "{{ user }}"
      }
    }
  }
}
""")


def test_platform_detection():
    """Test platform detection."""
    print("🔍 Testing platform detection...")
    
    detector = PlatformDetector()
    platform_info = detector.detect_platform()
    
    print(f"   OS: {platform_info['os']}")
    print(f"   Architecture: {platform_info['architecture']}")
    print(f"   Python: {platform_info['python_version']}")
    print(f"   User: {platform_info['user']}")
    print(f"   CI Environment: {platform_info['is_ci']}")
    
    return platform_info


def test_deployment():
    """Test Cursor configuration deployment."""
    print("\n🤖 Testing Cursor configuration deployment...")
    
    # Create temporary directories
    with tempfile.TemporaryDirectory() as temp_dir:
        temp_path = Path(temp_dir)
        
        # Create test repository
        repo_root = temp_path / "test_repo"
        repo_root.mkdir()
        
        # Create test package
        package_root = temp_path / "test_package"
        package_root.mkdir()
        
        # Create test templates
        create_test_templates(package_root)
        
        # Create deployer
        deployer = CursorConfigDeployer(repo_root, package_root)
        
        # Test platform detection
        platform_info = deployer.detect_platform()
        print(f"   Detected platform: {platform_info['os']}")
        
        # Test dry run
        print("   Testing dry run...")
        deployer.dry_run()
        
        # Test deployment
        print("   Testing deployment...")
        deployer.deploy()
        
        # Check results
        cursor_dir = repo_root / ".cursor"
        assert cursor_dir.exists(), ".cursor directory should be created"
        
        rules_dir = cursor_dir / "rules"
        assert rules_dir.exists(), "rules directory should be created"
        
        prompts_dir = cursor_dir / "prompts"
        assert prompts_dir.exists(), "prompts directory should be created"
        
        # Check that shared rule was deployed
        shared_rule = rules_dir / "shared.mdc"
        assert shared_rule.exists(), "shared rule should be deployed"
        
        # Check that platform-specific rule was deployed
        os_name = platform_info["os"]
        platform_rule = rules_dir / f"{os_name}-dev.mdc"
        assert platform_rule.exists(), f"{os_name}-dev rule should be deployed"
        
        # Check that prompt was deployed
        prompt_file = prompts_dir / "test-prompt.md"
        assert prompt_file.exists(), "test prompt should be deployed"
        
        # Check that MCP config was deployed
        mcp_config = cursor_dir / "mcp.json"
        assert mcp_config.exists(), "MCP config should be deployed"
        
        # Test status display
        print("   Testing status display...")
        deployer.show_status()
        
        print("   ✅ Deployment test passed!")


def test_custom_rules():
    """Test deployment with custom rules."""
    print("\n📦 Testing custom rules deployment...")
    
    with tempfile.TemporaryDirectory() as temp_dir:
        temp_path = Path(temp_dir)
        
        # Create test repository
        repo_root = temp_path / "test_repo"
        repo_root.mkdir()
        
        # Create test package
        package_root = temp_path / "test_package"
        package_root.mkdir()
        
        # Create test templates
        create_test_templates(package_root)
        
        # Create custom rule file
        custom_rule = temp_path / "custom-rule.mdc"
        custom_rule.write_text("""---
title: Custom Rule
description: A custom rule for testing
---

# Custom Rule

This is a custom rule.
""")
        
        # Create deployer
        deployer = CursorConfigDeployer(repo_root, package_root)
        
        # Deploy with custom rules
        deployer.deploy(custom_rules=[custom_rule])
        
        # Check that custom rule was imported
        custom_dir = repo_root / ".cursor" / "rules" / "custom"
        assert custom_dir.exists(), "custom rules directory should be created"
        
        imported_rule = custom_dir / "custom-rule.mdc"
        assert imported_rule.exists(), "custom rule should be imported"
        
        print("   ✅ Custom rules test passed!")


def test_opt_out():
    """Test opt-out functionality."""
    print("\n⏭️  Testing opt-out functionality...")
    
    with tempfile.TemporaryDirectory() as temp_dir:
        temp_path = Path(temp_dir)
        
        # Create test repository
        repo_root = temp_path / "test_repo"
        repo_root.mkdir()
        
        # Create test package
        package_root = temp_path / "test_package"
        package_root.mkdir()
        
        # Create test templates
        create_test_templates(package_root)
        
        # Create deployer
        deployer = CursorConfigDeployer(repo_root, package_root)
        
        # Deploy with opt-out
        deployer.deploy(opt_out=True)
        
        # Check that .cursor directory was not created
        cursor_dir = repo_root / ".cursor"
        assert not cursor_dir.exists(), ".cursor directory should not be created with opt-out"
        
        print("   ✅ Opt-out test passed!")


def main():
    """Run all tests."""
    print("🧪 Running Cursor configuration deployment tests...\n")
    
    try:
        # Test platform detection
        test_platform_detection()
        
        # Test basic deployment
        test_deployment()
        
        # Test custom rules
        test_custom_rules()
        
        # Test opt-out
        test_opt_out()
        
        print("\n🎉 All tests passed!")
        
    except Exception as e:
        print(f"\n❌ Test failed: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)


if __name__ == "__main__":
    main()
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/core/exceptions.py:
--------------------------------------------------------------------------------

```python
"""Custom exceptions for MCP Project Orchestrator.

This module defines custom exceptions used throughout the project for specific error cases.
All exceptions include error codes for programmatic handling and detailed context for debugging.
"""

from enum import Enum
from typing import Any, Dict, Optional


class ErrorCode(Enum):
    """Standard error codes for MCP operations."""
    
    # General errors (E00x)
    UNKNOWN_ERROR = "E000"
    INTERNAL_ERROR = "E001"
    
    # Configuration errors (E01x)
    CONFIG_INVALID = "E010"
    CONFIG_MISSING = "E011"
    CONFIG_LOAD_FAILED = "E012"
    
    # Template errors (E02x)
    TEMPLATE_NOT_FOUND = "E020"
    TEMPLATE_INVALID = "E021"
    TEMPLATE_LOAD_FAILED = "E022"
    TEMPLATE_APPLY_FAILED = "E023"
    
    # Prompt errors (E03x)
    PROMPT_NOT_FOUND = "E030"
    PROMPT_INVALID = "E031"
    PROMPT_RENDER_FAILED = "E032"
    PROMPT_VARIABLE_MISSING = "E033"
    
    # Diagram errors (E04x)
    DIAGRAM_INVALID = "E040"
    DIAGRAM_GENERATION_FAILED = "E041"
    DIAGRAM_RENDER_FAILED = "E042"
    DIAGRAM_VALIDATION_FAILED = "E043"
    
    # Resource errors (E05x)
    RESOURCE_NOT_FOUND = "E050"
    RESOURCE_INVALID = "E051"
    RESOURCE_LOAD_FAILED = "E052"
    RESOURCE_SAVE_FAILED = "E053"
    
    # Validation errors (E06x)
    VALIDATION_FAILED = "E060"
    SCHEMA_INVALID = "E061"
    
    # I/O errors (E07x)
    FILE_NOT_FOUND = "E070"
    FILE_READ_ERROR = "E071"
    FILE_WRITE_ERROR = "E072"
    DIRECTORY_NOT_FOUND = "E073"


class MCPException(Exception):
    """Base exception class for MCP Project Orchestrator with enhanced error tracking.
    
    All MCP exceptions include:
    - A human-readable message
    - A standard error code for programmatic handling
    - Contextual details as a dictionary
    - Optional reference to the underlying cause
    
    Attributes:
        message: Human-readable error message
        code: Standard error code (ErrorCode enum)
        details: Dictionary with additional context
        cause: Optional underlying exception that caused this error
    """

    def __init__(
        self,
        message: str,
        code: ErrorCode = ErrorCode.UNKNOWN_ERROR,
        details: Optional[Dict[str, Any]] = None,
        cause: Optional[Exception] = None
    ):
        """Initialize the exception.

        Args:
            message: Human-readable error message
            code: Standard error code
            details: Optional dictionary with additional context
            cause: Optional underlying exception
        """
        super().__init__(message)
        self.message = message
        self.code = code
        self.details = details or {}
        self.cause = cause
    
    def to_dict(self) -> Dict[str, Any]:
        """Convert exception to dictionary for serialization.
        
        Returns:
            Dictionary representation of the exception
        """
        return {
            "error": self.__class__.__name__,
            "message": self.message,
            "code": self.code.value,
            "details": self.details,
            "cause": str(self.cause) if self.cause else None
        }
    
    def __str__(self) -> str:
        """Get string representation of exception."""
        parts = [f"[{self.code.value}] {self.message}"]
        
        if self.details:
            parts.append(f"Details: {self.details}")
        
        if self.cause:
            parts.append(f"Caused by: {self.cause}")
        
        return " | ".join(parts)


class TemplateError(MCPException):
    """Exception raised for template-related errors."""

    def __init__(
        self,
        message: str,
        template_path: str = None,
        code: ErrorCode = ErrorCode.TEMPLATE_INVALID,
        cause: Optional[Exception] = None
    ):
        """Initialize the exception.

        Args:
            message: Error message
            template_path: Optional path to the template that caused the error
            code: Error code (default: TEMPLATE_INVALID)
            cause: Optional underlying exception
        """
        details = {"template_path": template_path} if template_path else {}
        super().__init__(message, code, details, cause)
        self.template_path = template_path


class PromptError(MCPException):
    """Exception raised for prompt-related errors."""

    def __init__(
        self,
        message: str,
        prompt_name: str = None,
        code: ErrorCode = ErrorCode.PROMPT_INVALID,
        cause: Optional[Exception] = None
    ):
        """Initialize the exception.

        Args:
            message: Error message
            prompt_name: Optional name of the prompt that caused the error
            code: Error code (default: PROMPT_INVALID)
            cause: Optional underlying exception
        """
        details = {"prompt_name": prompt_name} if prompt_name else {}
        super().__init__(message, code, details, cause)
        self.prompt_name = prompt_name


class MermaidError(MCPException):
    """Exception raised for Mermaid diagram generation errors."""

    def __init__(
        self,
        message: str,
        diagram_type: str = None,
        code: ErrorCode = ErrorCode.DIAGRAM_INVALID,
        cause: Optional[Exception] = None
    ):
        """Initialize the exception.

        Args:
            message: Error message
            diagram_type: Optional type of diagram that caused the error
            code: Error code (default: DIAGRAM_INVALID)
            cause: Optional underlying exception
        """
        details = {"diagram_type": diagram_type} if diagram_type else {}
        super().__init__(message, code, details, cause)
        self.diagram_type = diagram_type


class ConfigError(MCPException):
    """Exception raised for configuration-related errors."""

    def __init__(
        self,
        message: str,
        config_path: str = None,
        code: ErrorCode = ErrorCode.CONFIG_INVALID,
        cause: Optional[Exception] = None
    ):
        """Initialize the exception.

        Args:
            message: Error message
            config_path: Optional path to the configuration that caused the error
            code: Error code (default: CONFIG_INVALID)
            cause: Optional underlying exception
        """
        details = {"config_path": config_path} if config_path else {}
        super().__init__(message, code, details, cause)
        self.config_path = config_path


class ValidationError(MCPException):
    """Exception raised for validation errors."""

    def __init__(
        self,
        message: str,
        validation_errors: list = None,
        code: ErrorCode = ErrorCode.VALIDATION_FAILED,
        cause: Optional[Exception] = None
    ):
        """Initialize the exception.

        Args:
            message: Error message
            validation_errors: Optional list of validation errors
            code: Error code (default: VALIDATION_FAILED)
            cause: Optional underlying exception
        """
        details = {"validation_errors": validation_errors} if validation_errors else {}
        super().__init__(message, code, details, cause)
        self.validation_errors = validation_errors or []


class ResourceError(MCPException):
    """Exception raised for resource-related errors."""

    def __init__(
        self,
        message: str,
        resource_path: str = None,
        code: ErrorCode = ErrorCode.RESOURCE_INVALID,
        cause: Optional[Exception] = None
    ):
        """Initialize the exception.

        Args:
            message: Error message
            resource_path: Optional path to the resource that caused the error
            code: Error code (default: RESOURCE_INVALID)
            cause: Optional underlying exception
        """
        details = {"resource_path": resource_path} if resource_path else {}
        super().__init__(message, code, details, cause)
        self.resource_path = resource_path 
```

--------------------------------------------------------------------------------
/AWS_MCP_QUICKSTART.md:
--------------------------------------------------------------------------------

```markdown
# AWS MCP Quick Start Guide

This guide helps you quickly get started with the AWS Model Context Protocol integration.

## What is AWS MCP?

AWS MCP adds AI-powered AWS service access to your MCP Project Orchestrator, enabling:
- 🔧 AWS service management (S3, EC2, Lambda, CloudFormation, IAM)
- 📚 AWS best practices and architectural guidance
- 💰 Cost optimization recommendations
- 🔒 Security and compliance guidance

## Quick Setup (3 Steps)

### 1. Install Dependencies

```bash
# Install with AWS support
pip install -e ".[aws]"

# Or just install boto3
pip install boto3 botocore
```

### 2. Configure AWS Credentials

Choose ONE method:

**Method A: Environment Variables** (Simple)
```bash
export AWS_REGION=us-east-1
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
```

**Method B: .env File** (Recommended for development)
```bash
cp .env.example .env
# Edit .env and add your credentials
```

**Method C: AWS CLI Profile** (Best for existing AWS CLI users)
```bash
aws configure  # If not already configured
export AWS_PROFILE=default
export AWS_REGION=us-east-1
```

**Method D: IAM Role** (Best for production on AWS)
```bash
# No credentials needed!
# Just set the region
export AWS_REGION=us-east-1
```

### 3. Run Setup Script

```bash
./scripts/setup_aws_mcp.sh
```

This will:
- ✅ Check boto3 installation
- ✅ Create .env file
- ✅ Validate AWS configuration
- ✅ Test AWS MCP integration

## Usage Examples

### Python API

```python
from mcp_project_orchestrator.aws_mcp import AWSMCPIntegration, AWSConfig

# Initialize
aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))

# List S3 buckets
buckets = aws.list_s3_buckets()
for bucket in buckets:
    print(f"Bucket: {bucket['Name']}")

# Get best practices
practices = aws.get_aws_best_practices('s3')
print("Security:", practices['security'])
print("Cost:", practices['cost'])
print("Performance:", practices['performance'])

# Estimate costs
costs = aws.estimate_costs('s3', {
    'storage_gb': 100,
    'requests': 10000,
    'data_transfer_gb': 50
})
print(f"Estimated monthly cost: ${costs['total_usd']}")
```

### MCP Tools (for AI Assistants)

When the MCP server is running, use these tools:

```
aws_list_s3_buckets
  → Lists all S3 buckets in your account

aws_list_ec2_instances  
  → Lists all EC2 instances in the region

aws_list_lambda_functions
  → Lists all Lambda functions

aws_best_practices s3
  → Gets AWS best practices for S3

aws_estimate_costs s3 {"storage_gb": 100, "requests": 10000}
  → Estimates S3 costs based on usage
```

## Environment Variables Reference

### Essential
```bash
AWS_REGION=us-east-1           # Required: AWS region
```

### Authentication (choose one)
```bash
# Option 1: Access Keys
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...

# Option 2: AWS Profile
AWS_PROFILE=default

# Option 3: IAM Role (no variables needed)
```

### Optional
```bash
AWS_SESSION_TOKEN=...          # For temporary credentials
AWS_ENDPOINT_URL=...           # For LocalStack testing
AWS_ENFORCE_BEST_PRACTICES=true
AWS_COST_OPTIMIZATION=true
```

## Common Use Cases

### 1. List and Manage S3 Buckets

```python
aws = AWSMCPIntegration()

# List all buckets
buckets = aws.list_s3_buckets()

# List objects in a bucket
objects = aws.list_s3_objects('my-bucket', prefix='data/')

# Upload a file
aws.upload_to_s3('my-bucket', 'local/file.txt', 'remote/file.txt')
```

### 2. Monitor EC2 Instances

```python
# List all instances
instances = aws.list_ec2_instances()
for inst in instances:
    print(f"{inst['InstanceId']}: {inst['State']['Name']}")

# Get specific instance status
status = aws.get_ec2_instance_status('i-1234567890abcdef0')
```

### 3. Invoke Lambda Functions

```python
# List functions
functions = aws.list_lambda_functions()

# Invoke a function
result = aws.invoke_lambda(
    'my-function',
    payload={'key': 'value'}
)
print(result['Payload'])
```

### 4. Get AWS Best Practices

```python
# S3 best practices
s3_tips = aws.get_aws_best_practices('s3')
print("Security tips:", s3_tips['security'])

# EC2 best practices
ec2_tips = aws.get_aws_best_practices('ec2')
print("Cost optimization:", ec2_tips['cost'])

# Lambda best practices
lambda_tips = aws.get_aws_best_practices('lambda')
print("Performance tips:", lambda_tips['performance'])
```

### 5. Estimate AWS Costs

```python
# S3 costs
s3_costs = aws.estimate_costs('s3', {
    'storage_gb': 1000,
    'requests': 100000,
    'data_transfer_gb': 100
})
print(f"S3 monthly cost: ${s3_costs['total_usd']}")

# EC2 costs (t2.micro running 24/7)
ec2_costs = aws.estimate_costs('ec2', {
    'hours': 730  # hours per month
})
print(f"EC2 monthly cost: ${ec2_costs['total_usd']}")

# Lambda costs
lambda_costs = aws.estimate_costs('lambda', {
    'requests': 1000000,
    'gb_seconds': 500000
})
print(f"Lambda monthly cost: ${lambda_costs['total_usd']}")
```

## Testing with LocalStack

Test AWS integrations locally without real AWS credentials:

```bash
# Start LocalStack
docker run -d -p 4566:4566 localstack/localstack

# Configure for LocalStack
export AWS_ENDPOINT_URL=http://localhost:4566
export AWS_REGION=us-east-1
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test

# Now use AWS MCP as normal
```

## Troubleshooting

### "boto3 is not installed"
```bash
pip install boto3 botocore
```

### "Unable to locate credentials"
```bash
# Check environment variables
echo $AWS_REGION
echo $AWS_ACCESS_KEY_ID

# Or configure AWS CLI
aws configure
```

### "Access Denied" errors
```bash
# Check your identity
aws sts get-caller-identity

# Check IAM permissions
# Ensure your user/role has necessary permissions
```

### "AWS configuration is invalid"
Check that you have both access key ID and secret key set:
```bash
# Both must be set together
export AWS_ACCESS_KEY_ID=your_key
export AWS_SECRET_ACCESS_KEY=your_secret
```

## Security Best Practices

1. ✅ **Use IAM roles** when running on AWS (EC2, ECS, Lambda)
2. ✅ **Never commit credentials** to git (use .env in .gitignore)
3. ✅ **Rotate credentials** regularly
4. ✅ **Use least privilege** IAM policies
5. ✅ **Enable MFA** for AWS console access
6. ✅ **Use temporary credentials** (STS) when possible

## Documentation

- 📖 **Full documentation**: [docs/AWS_MCP.md](./docs/AWS_MCP.md)
- 📖 **Implementation details**: [AWS_MCP_IMPLEMENTATION_SUMMARY.md](./AWS_MCP_IMPLEMENTATION_SUMMARY.md)
- 📖 **AWS setup guide**: [docs/AWS.md](./docs/AWS.md)
- 📖 **Main README**: [README.md](./README.md)

## Getting Help

1. Read the full documentation: `docs/AWS_MCP.md`
2. Run the setup script: `./scripts/setup_aws_mcp.sh`
3. Check the test examples: `tests/test_aws_mcp.py`
4. Review environment variables: `.env.example`

## Next Steps

After setup:
1. ✅ Start the MCP server: `python -m mcp_project_orchestrator.project_orchestration`
2. ✅ Connect your AI assistant (Claude Desktop, etc.)
3. ✅ Use AWS MCP tools in conversations
4. ✅ Explore best practices and cost optimization

## Example: Complete Workflow

```python
#!/usr/bin/env python3
"""Complete AWS MCP workflow example."""
from mcp_project_orchestrator.aws_mcp import AWSMCPIntegration, AWSConfig

# Initialize AWS MCP
aws = AWSMCPIntegration(AWSConfig(region='us-east-1'))

# 1. Check what AWS resources you have
print("=== Your AWS Resources ===")
print(f"S3 Buckets: {len(aws.list_s3_buckets())}")
print(f"EC2 Instances: {len(aws.list_ec2_instances())}")
print(f"Lambda Functions: {len(aws.list_lambda_functions())}")

# 2. Get best practices for your services
print("\n=== S3 Best Practices ===")
practices = aws.get_aws_best_practices('s3')
for tip in practices['security'][:3]:
    print(f"  • {tip}")

# 3. Estimate your costs
print("\n=== Cost Estimation ===")
s3_estimate = aws.estimate_costs('s3', {
    'storage_gb': 100,
    'requests': 10000,
    'data_transfer_gb': 50
})
print(f"Estimated S3 cost: ${s3_estimate['total_usd']}/month")

# 4. Take action based on best practices
# ... your code here ...

print("\n✅ Workflow complete!")
```

---

**Ready to start?** Run: `./scripts/setup_aws_mcp.sh`
```

--------------------------------------------------------------------------------
/mcp-project-orchestrator/openssl/mcp_orchestrator/deploy_cursor.py:
--------------------------------------------------------------------------------

```python
"""
Deploy Cursor configuration for specific project types.

This module provides a specialized CLI entrypoint for deploying
Cursor configuration with project-type-specific presets.
"""

import click
import os
from pathlib import Path
from typing import Optional, Dict, Any

from .cursor_deployer import CursorConfigDeployer
from .platform_detector import PlatformDetector


class ProjectTypeConfig:
    """Configuration for different project types."""
    
    CONFIGS = {
        "openssl": {
            "name": "OpenSSL",
            "description": "OpenSSL cryptographic library development",
            "templates_dir": "cursor-rules",
            "output_paths": {
                "rules": ".cursor/rules",
                "prompts": ".cursor/prompts", 
                "mcp_config": ".cursor/mcp.json",
                "gitignore": ".cursor/.gitignore"
            },
            "required_env_vars": [
                "CONAN_USER_HOME",
                "OPENSSL_ROOT_DIR"
            ],
            "optional_env_vars": [
                "CLOUDSMITH_API_KEY",
                "CONAN_REPOSITORY_NAME",
                "GITHUB_TOKEN"
            ],
            "mcp_servers": [
                "openssl-context",
                "build-intelligence", 
                "fips-compliance",
                "security-scanner"
            ]
        },
        "generic": {
            "name": "Generic",
            "description": "Generic C++ project development",
            "templates_dir": "cursor-rules",
            "output_paths": {
                "rules": ".cursor/rules",
                "prompts": ".cursor/prompts",
                "mcp_config": ".cursor/mcp.json", 
                "gitignore": ".cursor/.gitignore"
            },
            "required_env_vars": [],
            "optional_env_vars": [
                "CONAN_USER_HOME",
                "GITHUB_TOKEN"
            ],
            "mcp_servers": [
                "build-intelligence",
                "workflow-orchestrator"
            ]
        }
    }
    
    @classmethod
    def get_config(cls, project_type: str) -> Dict[str, Any]:
        """Get configuration for a project type."""
        if project_type not in cls.CONFIGS:
            raise ValueError(f"Unknown project type: {project_type}. Available: {', '.join(cls.CONFIGS.keys())}")
        return cls.CONFIGS[project_type]
    
    @classmethod
    def list_types(cls) -> list:
        """List available project types."""
        return list(cls.CONFIGS.keys())


def check_environment_variables(project_type: str, verbose: bool = False) -> tuple[bool, list[str]]:
    """
    Check environment variables for a project type.
    
    Args:
        project_type: Type of project
        verbose: Show detailed information
        
    Returns:
        Tuple of (all_required_present, missing_vars)
    """
    config = ProjectTypeConfig.get_config(project_type)
    missing_vars = []
    
    # Check required environment variables
    for var in config["required_env_vars"]:
        if not os.getenv(var):
            missing_vars.append(var)
    
    # Check optional environment variables
    optional_missing = []
    for var in config["optional_env_vars"]:
        if not os.getenv(var):
            optional_missing.append(var)
    
    if verbose:
        click.echo(f"Environment variables for {project_type} project:")
        click.echo(f"  Required: {', '.join(config['required_env_vars']) or 'None'}")
        click.echo(f"  Optional: {', '.join(config['optional_env_vars']) or 'None'}")
        
        if missing_vars:
            click.echo(f"  ❌ Missing required: {', '.join(missing_vars)}")
        else:
            click.echo("  ✅ All required variables present")
        
        if optional_missing:
            click.echo(f"  ⚠️  Missing optional: {', '.join(optional_missing)}")
        else:
            click.echo("  ✅ All optional variables present")
    
    return len(missing_vars) == 0, missing_vars


@click.command()
@click.option('--project-type', 
              type=click.Choice(ProjectTypeConfig.list_types()),
              default='openssl',
              help='Type of project to configure')
@click.option('--repo-root', 
              type=click.Path(exists=True), 
              default='.',
              help='Path to repository root')
@click.option('--force', 
              is_flag=True,
              help='Overwrite existing .cursor/ configuration')
@click.option('--custom-rules', 
              multiple=True, 
              type=click.Path(exists=True),
              help='Path to custom rule files to import')
@click.option('--opt-out', 
              is_flag=True,
              help='Skip Cursor configuration deployment (developer opt-out)')
@click.option('--dry-run', 
              is_flag=True,
              help='Show what would be deployed without making changes')
@click.option('--check-env', 
              is_flag=True,
              help='Check environment variables and exit')
@click.option('--verbose', '-v',
              is_flag=True,
              help='Show detailed information')
def deploy_cursor(project_type: str, 
                 repo_root: str, 
                 force: bool, 
                 custom_rules: tuple,
                 opt_out: bool, 
                 dry_run: bool,
                 check_env: bool,
                 verbose: bool):
    """
    Deploy Cursor AI configuration for specific project types.
    
    This command provides project-type-specific configuration deployment
    with preset output paths and environment variable validation.
    """
    
    # Get project configuration
    try:
        config = ProjectTypeConfig.get_config(project_type)
    except ValueError as e:
        click.echo(f"❌ {e}")
        return 1
    
    click.echo(f"🚀 Deploying Cursor configuration for {config['name']} project")
    click.echo(f"   Description: {config['description']}")
    
    # Check environment variables
    env_valid, missing_vars = check_environment_variables(project_type, verbose)
    
    if not env_valid:
        click.echo(f"❌ Missing required environment variables: {', '.join(missing_vars)}")
        click.echo("   Please set these variables and try again.")
        return 1
    
    if check_env:
        click.echo("✅ Environment check completed")
        return 0
    
    # Show output paths
    if verbose:
        click.echo(f"   Output paths:")
        for key, path in config["output_paths"].items():
            click.echo(f"     {key}: {path}")
        
        click.echo(f"   MCP servers: {', '.join(config['mcp_servers'])}")
    
    # Deploy configuration
    repo_path = Path(repo_root).resolve()
    package_root = Path(__file__).parent.parent
    
    deployer = CursorConfigDeployer(repo_path, package_root)
    
    if dry_run:
        click.echo("🔍 Dry run mode - no files will be created")
        deployer.dry_run()
        return 0
    
    custom_rules_list = [Path(p) for p in custom_rules] if custom_rules else None
    
    try:
        deployer.deploy(
            force=force,
            custom_rules=custom_rules_list,
            opt_out=opt_out
        )
        
        # Validate deployed configuration
        if not opt_out:
            from .yaml_validator import validate_cursor_configuration
            cursor_dir = repo_path / ".cursor"
            
            if cursor_dir.exists():
                is_valid, errors = validate_cursor_configuration(cursor_dir)
                if not is_valid:
                    click.echo("⚠️  Configuration validation warnings:")
                    for error in errors:
                        click.echo(f"   {error}")
                elif verbose:
                    click.echo("✅ Configuration validation passed")
        
        click.echo(f"🎉 Cursor configuration deployed successfully for {config['name']} project!")
        return 0
        
    except Exception as e:
        click.echo(f"❌ Deployment failed: {e}")
        if verbose:
            import traceback
            traceback.print_exc()
        return 1


@click.group()
def cli():
    """Cursor configuration deployment for project types."""
    pass


cli.add_command(deploy_cursor)


if __name__ == '__main__':
    cli()
```
Page 8/21FirstPrevNextLast