This is page 15 of 21. Use http://codebase.md/sparesparrow/mcp-project-orchestrator?format=md&lines=false&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/other/Docker_MCP_Servers_Orchestration_Guide.json:
--------------------------------------------------------------------------------

```json
{
  "name": "Docker MCP Servers Orchestration Guide",
  "description": "A comprehensive guide for setting up, configuring, and orchestrating multiple MCP servers in a Docker environment",
  "type": "prompt",
  "category": "other",
  "content": "# Docker MCP Servers Orchestration Guide\\n\\n## Overview\\n\\nThis guide will help you set up a containerized environment with multiple integrated MCP servers for {{use_case}}. The architecture leverages Docker Compose to orchestrate these servers, providing a robust foundation for AI-powered applications with enhanced context capabilities.\\n\\n## Prerequisites\\n\\n- Docker and Docker Compose installed\\n- Basic understanding of containerization concepts\\n- Git for cloning repositories\\n- {{additional_prerequisites}}\\n\\n## Core MCP Servers Architecture\\n\\n```mermaid\\ngraph TD\\n    subgraph \\\\\\\"Docker Compose Network\\\\\\\"\\n        subgraph \\\\\\\"Core Service\\\\\\\"\\n            MCP[MCP Prompts Server]\\n        end\\n        \\n        subgraph \\\\\\\"MCP Resource Servers\\\\\\\"\\n            FS[Filesystem Server]\\n            MEM[Memory Server]\\n            GH[GitHub Server]\\n            ST[Sequential Thinking]\\n            EL[ElevenLabs Server]\\n            {{additional_servers}}\\n        end\\n        \\n        subgraph \\\\\\\"Storage Options\\\\\\\"\\n            File[(File Storage)]\\n            PG[(PostgreSQL)]\\n            PGAI[(PGAI/TimescaleDB)]\\n        end\\n    end\\n    \\n    Client[AI Client] -->|Requests| MCP\\n    MCP -->|Resource URI Requests| FS\\n    MCP -->|Resource URI Requests| MEM\\n    MCP -->|Resource URI Requests| GH\\n    MCP -->|Resource URI Requests| ST\\n    MCP -->|Resource URI Requests| EL\\n    \\n    MCP -->|Storage| File\\n    MCP -->|Storage| PG\\n    MCP -->|Storage| PGAI\\n    \\n    FS -->|Access| LocalFiles[(Local Files)]\\n    GH -->|API Calls| GitHub[(GitHub API)]\\n    EL -->|API Calls| ElevenLabsAPI[(ElevenLabs API)]\\n    \\n    classDef core fill:#f9a,stroke:#d87,stroke-width:2px\\n    classDef server fill:#adf,stroke:#7ad,stroke-width:1px\\n    classDef storage fill:#ad8,stroke:#7a6,stroke-width:1px\\n    classDef external fill:#ddd,stroke:#999,stroke-width:1px\\n    \\n    class MCP core\\n    class FS,MEM,GH,ST,EL server\\n    class File,PG,PGAI storage\\n    class Client,LocalFiles,GitHub,ElevenLabsAPI external\\n```\\n\\n## Setting Up Your Environment\\n\\n### 1. Base Docker Compose Configuration\\n\\nCreate a base Docker Compose file (`docker-compose.base.yml`):\\n\\n```yaml\\nversion: '3'\\n\\nservices:\\n  mcp-prompts:\\n    image: {{registry}}/mcp-prompts:latest\\n    container_name: mcp-prompts\\n    environment:\\n      - NODE_ENV=production\\n      - PORT=3000\\n      - HOST=0.0.0.0\\n      - STORAGE_TYPE=file\\n      - PROMPTS_DIR=/app/data/prompts\\n      - BACKUPS_DIR=/app/data/backups\\n      - LOG_LEVEL=info\\n    volumes:\\n      - mcp-data:/app/data\\n    ports:\\n      - \\\\\\\"3000:3000\\\\\\\"\\n    healthcheck:\\n      test: [\\\\\\\"CMD\\\\\\\", \\\\\\\"node\\\\\\\", \\\\\\\"-e\\\\\\\", \\\\\\\"require('http').request({hostname: 'localhost', port: 3000, path: '/health', timeout: 2000}, (res) => process.exit(res.statusCode !== 200)).end()\\\\\\\"]\\n      interval: 30s\\n      timeout: 10s\\n      retries: 3\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\nnetworks:\\n  mcp-network:\\n    driver: bridge\\n\\nvolumes:\\n  mcp-data:\\n    name: mcp-data\\n```\\n\\n### 2. Resource Servers Configuration\\n\\nCreate an integration configuration file (`docker-compose.integration.yml`):\\n\\n```yaml\\nversion: '3'\\n\\nservices:\\n  # Override the base service with integration configuration\\n  mcp-prompts:\\n    environment:\\n      - MCP_INTEGRATION=true\\n      - MCP_MEMORY_URL=http://mcp-memory:3000\\n      - MCP_FILESYSTEM_URL=http://mcp-filesystem:3000\\n      - MCP_GITHUB_URL=http://mcp-github:3000\\n      - MCP_THINKING_URL=http://mcp-sequential-thinking:3000\\n      - MCP_ELEVENLABS_URL=http://mcp-elevenlabs:3000\\n    depends_on:\\n      - mcp-memory\\n      - mcp-filesystem\\n      - mcp-github\\n      - mcp-sequential-thinking\\n      - mcp-elevenlabs\\n\\n  # MCP Memory Server\\n  mcp-memory:\\n    image: node:20-alpine\\n    container_name: mcp-memory\\n    command: sh -c \\\\\\\"npm install -g @modelcontextprotocol/server-memory && npx -y @modelcontextprotocol/server-memory\\\\\\\"\\n    ports:\\n      - \\\\\\\"3020:3000\\\\\\\"\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\n  # MCP Filesystem Server\\n  mcp-filesystem:\\n    image: node:20-alpine\\n    container_name: mcp-filesystem\\n    command: sh -c \\\\\\\"npm install -g @modelcontextprotocol/server-filesystem && npx -y @modelcontextprotocol/server-filesystem /data\\\\\\\"\\n    volumes:\\n      - mcp-filesystem-data:/data\\n    ports:\\n      - \\\\\\\"3021:3000\\\\\\\"\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\n  # MCP GitHub Server\\n  mcp-github:\\n    image: node:20-alpine\\n    container_name: mcp-github\\n    command: sh -c \\\\\\\"npm install -g @modelcontextprotocol/server-github && npx -y @modelcontextprotocol/server-github\\\\\\\"\\n    environment:\\n      - GITHUB_PERSONAL_ACCESS_TOKEN={{github_token}}\\n    ports:\\n      - \\\\\\\"3022:3000\\\\\\\"\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\n  # MCP Sequential Thinking Server\\n  mcp-sequential-thinking:\\n    image: node:20-alpine\\n    container_name: mcp-sequential-thinking\\n    command: sh -c \\\\\\\"npm install -g @modelcontextprotocol/server-sequential-thinking && npx -y @modelcontextprotocol/server-sequential-thinking\\\\\\\"\\n    ports:\\n      - \\\\\\\"3023:3000\\\\\\\"\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\n  # MCP ElevenLabs Server\\n  mcp-elevenlabs:\\n    image: node:20-alpine\\n    container_name: mcp-elevenlabs\\n    command: sh -c \\\\\\\"npm install -g elevenlabs-mcp-server && npx -y elevenlabs-mcp-server\\\\\\\"\\n    environment:\\n      - ELEVENLABS_API_KEY={{elevenlabs_api_key}}\\n      - ELEVENLABS_VOICE_ID={{elevenlabs_voice_id}}\\n      - ELEVENLABS_MODEL_ID={{elevenlabs_model_id}}\\n      - ELEVENLABS_OUTPUT_DIR=/data/audio\\n    volumes:\\n      - mcp-elevenlabs-data:/data\\n    ports:\\n      - \\\\\\\"3024:3000\\\\\\\"\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\nvolumes:\\n  mcp-filesystem-data:\\n    name: mcp-filesystem-data\\n  mcp-elevenlabs-data:\\n    name: mcp-elevenlabs-data\\n```\\n\\n### 3. Storage Options\\n\\n#### File Storage (Default)\\nUses the default file storage mounted as a Docker volume.\\n\\n#### PostgreSQL Storage\\nCreate a PostgreSQL configuration file (`docker-compose.postgres.yml`):\\n\\n```yaml\\nversion: '3'\\n\\nservices:\\n  # Override the base service to use PostgreSQL\\n  mcp-prompts:\\n    environment:\\n      - STORAGE_TYPE=postgres\\n      - POSTGRES_HOST=postgres\\n      - POSTGRES_PORT=5432\\n      - POSTGRES_USER={{postgres_user}}\\n      - POSTGRES_PASSWORD={{postgres_password}}\\n      - POSTGRES_DATABASE={{postgres_database}}\\n    depends_on:\\n      postgres:\\n        condition: service_healthy\\n\\n  # PostgreSQL Database\\n  postgres:\\n    image: postgres:14-alpine\\n    container_name: mcp-prompts-postgres\\n    environment:\\n      - POSTGRES_USER={{postgres_user}}\\n      - POSTGRES_PASSWORD={{postgres_password}}\\n      - POSTGRES_DB={{postgres_database}}\\n    volumes:\\n      - mcp-prompts-postgres-data:/var/lib/postgresql/data\\n      - ./postgres/init:/docker-entrypoint-initdb.d\\n    ports:\\n      - \\\\\\\"5432:5432\\\\\\\"\\n    healthcheck:\\n      test: [\\\\\\\"CMD-SHELL\\\\\\\", \\\\\\\"pg_isready -U {{postgres_user}}\\\\\\\"]\\n      interval: 10s\\n      timeout: 5s\\n      retries: 5\\n      start_period: 10s\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\n  # Adminer for database management\\n  adminer:\\n    image: adminer:latest\\n    container_name: mcp-prompts-adminer\\n    ports:\\n      - \\\\\\\"8080:8080\\\\\\\"\\n    depends_on:\\n      - postgres\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\nvolumes:\\n  mcp-prompts-postgres-data:\\n    name: mcp-prompts-postgres-data\\n```\\n\\n#### PGAI/TimescaleDB (Vector Storage)\\nCreate a PGAI configuration file (`docker-compose.pgai.yml`):\\n\\n```yaml\\nversion: '3'\\n\\nservices:\\n  # Override the base service to use PGAI\\n  mcp-prompts:\\n    environment:\\n      - STORAGE_TYPE=pgai\\n      - PGAI_HOST=pgai\\n      - PGAI_PORT=5432\\n      - PGAI_USER=postgres\\n      - PGAI_PASSWORD=postgres\\n      - PGAI_DATABASE=mcp_prompts\\n      - PGAI_API_KEY={{pgai_api_key}}\\n      - PGAI_COLLECTION=mcp_prompts\\n    depends_on:\\n      pgai:\\n        condition: service_healthy\\n\\n  # TimescaleDB with PGAI extension\\n  pgai:\\n    image: timescale/timescaledb-pgai:pg15\\n    container_name: mcp-prompts-pgai\\n    environment:\\n      - POSTGRES_USER=postgres\\n      - POSTGRES_PASSWORD=postgres\\n      - POSTGRES_DB=mcp_prompts\\n    volumes:\\n      - mcp-prompts-pgai-data:/var/lib/postgresql/data\\n      - ./postgres/pgai-init:/docker-entrypoint-initdb.d\\n    ports:\\n      - \\\\\\\"5433:5432\\\\\\\"\\n    healthcheck:\\n      test: [\\\\\\\"CMD-SHELL\\\\\\\", \\\\\\\"pg_isready -U postgres\\\\\\\"]\\n      interval: 10s\\n      timeout: 5s\\n      retries: 5\\n      start_period: 30s\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\n  # Adminer for PGAI database management\\n  pgai-adminer:\\n    image: adminer:latest\\n    container_name: mcp-prompts-pgai-adminer\\n    ports:\\n      - \\\\\\\"8081:8080\\\\\\\"\\n    environment:\\n      - ADMINER_DEFAULT_SERVER=pgai\\n    depends_on:\\n      - pgai\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n\\nvolumes:\\n  mcp-prompts-pgai-data:\\n    name: mcp-prompts-pgai-data\\n```\\n\\n## Deployment and Management\\n\\n### Docker Compose Manager Script\\n\\nCreate a management script (`docker-compose-manager.sh`) for easier orchestration:\\n\\n```bash\\n#!/bin/bash\\n\\n# Colors for output\\nGREEN=\\\\\\\"\\\\\\\\033[0;32m\\\\\\\"\\nYELLOW=\\\\\\\"\\\\\\\\033[1;33m\\\\\\\"\\nBLUE=\\\\\\\"\\\\\\\\033[0;34m\\\\\\\"\\nRED=\\\\\\\"\\\\\\\\033[0;31m\\\\\\\"\\nNC=\\\\\\\"\\\\\\\\033[0m\\\\\\\" # No Color\\n\\n# Base directory for Docker Compose files\\nCOMPOSE_DIR=\\\\\\\"docker/compose\\\\\\\"\\nBASE_COMPOSE=\\\\\\\"$COMPOSE_DIR/docker-compose.base.yml\\\\\\\"\\n\\n# Display help message\\nfunction show_help {\\n  echo -e \\\\\\\"${BLUE}MCP Prompts Docker Compose Manager${NC}\\\\\\\"\\n  echo -e \\\\\\\"${YELLOW}Usage:${NC} $0 [command] [environment] [options]\\\\\\\"\\n  echo\\n  echo -e \\\\\\\"${YELLOW}Commands:${NC}\\\\\\\"\\n  echo -e \\\\\\\"  up        Start services\\\\\\\"\\n  echo -e \\\\\\\"  down      Stop services and remove containers\\\\\\\"\\n  echo -e \\\\\\\"  ps        List running services\\\\\\\"\\n  echo -e \\\\\\\"  logs      View logs\\\\\\\"\\n  echo -e \\\\\\\"  restart   Restart services\\\\\\\"\\n  echo -e \\\\\\\"  image     Build Docker images\\\\\\\"\\n  echo -e \\\\\\\"  publish   Build and publish Docker images\\\\\\\"\\n  echo\\n  echo -e \\\\\\\"${YELLOW}Environments:${NC}\\\\\\\"\\n  echo -e \\\\\\\"  base       Base MCP Prompts service\\\\\\\"\\n  echo -e \\\\\\\"  development Development environment with hot-reloading\\\\\\\"\\n  echo -e \\\\\\\"  postgres   PostgreSQL storage\\\\\\\"\\n  echo -e \\\\\\\"  pgai       PGAI TimescaleDB storage\\\\\\\"\\n  echo -e \\\\\\\"  test       Testing environment\\\\\\\"\\n  echo -e \\\\\\\"  integration Multiple MCP servers integration\\\\\\\"\\n  echo -e \\\\\\\"  sse        Server-Sent Events transport\\\\\\\"\\n  echo\\n  echo -e \\\\\\\"${YELLOW}Options:${NC}\\\\\\\"\\n  echo -e \\\\\\\"  -d, --detach     Run in detached mode\\\\\\\"\\n  echo -e \\\\\\\"  -t, --tag TAG    Specify tag for Docker images\\\\\\\"\\n  echo -e \\\\\\\"  -h, --help       Show this help message\\\\\\\"\\n}\\n\\n# Default values\\nDETACHED=\\\\\\\"\\\\\\\"\\nTAG=\\\\\\\"latest\\\\\\\"\\n\\n# Parse options\\nwhile [[ $# -gt 0 ]]; do\\n  case $1 in\\n    -h|--help)\\n      show_help\\n      exit 0\\n      ;;\\n    -d|--detach)\\n      DETACHED=\\\\\\\"-d\\\\\\\"\\n      shift\\n      ;;\\n    -t|--tag)\\n      TAG=\\\\\\\"$2\\\\\\\"\\n      shift 2\\n      ;;\\n    *)\\n      break\\n      ;;\\n  esac\\ndone\\n\\n# Check if at least command and environment are provided\\nif [ $# -lt 2 ]; then\\n  show_help\\n  exit 1\\nfi\\n\\nCOMMAND=$1\\nENV=$2\\n\\n# Validate environment\\nCOMPOSE_FILE=\\\\\\\"\\\\\\\"\\ncase $ENV in\\n  base)\\n    COMPOSE_FILE=\\\\\\\"$BASE_COMPOSE\\\\\\\"\\n    ;;\\n  development)\\n    COMPOSE_FILE=\\\\\\\"-f $BASE_COMPOSE -f $COMPOSE_DIR/docker-compose.development.yml\\\\\\\"\\n    ;;\\n  postgres)\\n    COMPOSE_FILE=\\\\\\\"-f $BASE_COMPOSE -f $COMPOSE_DIR/docker-compose.postgres.yml\\\\\\\"\\n    ;;\\n  pgai)\\n    COMPOSE_FILE=\\\\\\\"-f $BASE_COMPOSE -f $COMPOSE_DIR/docker-compose.pgai.yml\\\\\\\"\\n    ;;\\n  test)\\n    COMPOSE_FILE=\\\\\\\"-f $BASE_COMPOSE -f $COMPOSE_DIR/docker-compose.test.yml\\\\\\\"\\n    ;;\\n  integration)\\n    COMPOSE_FILE=\\\\\\\"-f $BASE_COMPOSE -f $COMPOSE_DIR/docker-compose.integration.yml\\\\\\\"\\n    ;;\\n  sse)\\n    COMPOSE_FILE=\\\\\\\"-f $BASE_COMPOSE -f $COMPOSE_DIR/docker-compose.sse.yml\\\\\\\"\\n    ;;\\n  *)\\n    echo -e \\\\\\\"${RED}Invalid environment: $ENV${NC}\\\\\\\"\\n    show_help\\n    exit 1\\n    ;;\\nesac\\n\\n# Execute the appropriate command\\ncase $COMMAND in\\n  up)\\n    echo -e \\\\\\\"${GREEN}Starting MCP Prompts services for environment: $ENV${NC}\\\\\\\"\\n    docker compose $COMPOSE_FILE up $DETACHED\\n    ;;\\n  down)\\n    echo -e \\\\\\\"${GREEN}Stopping MCP Prompts services for environment: $ENV${NC}\\\\\\\"\\n    docker compose $COMPOSE_FILE down\\n    ;;\\n  ps)\\n    echo -e \\\\\\\"${GREEN}Listing MCP Prompts services for environment: $ENV${NC}\\\\\\\"\\n    docker compose $COMPOSE_FILE ps\\n    ;;\\n  logs)\\n    echo -e \\\\\\\"${GREEN}Showing logs for MCP Prompts services in environment: $ENV${NC}\\\\\\\"\\n    docker compose $COMPOSE_FILE logs -f\\n    ;;\\n  restart)\\n    echo -e \\\\\\\"${GREEN}Restarting MCP Prompts services for environment: $ENV${NC}\\\\\\\"\\n    docker compose $COMPOSE_FILE restart\\n    ;;\\n  image)\\n    echo -e \\\\\\\"${GREEN}Building Docker image for environment: $ENV with tag: $TAG${NC}\\\\\\\"\\n    case $ENV in\\n      base|production)\\n        docker build -t {{registry}}/mcp-prompts:$TAG -f docker/Dockerfile.prod .\\n        echo -e \\\\\\\"${GREEN}Built: {{registry}}/mcp-prompts:$TAG${NC}\\\\\\\"\\n        ;;\\n      development)\\n        docker build -t {{registry}}/mcp-prompts:$TAG-dev -f docker/Dockerfile.development .\\n        echo -e \\\\\\\"${GREEN}Built: {{registry}}/mcp-prompts:$TAG-dev${NC}\\\\\\\"\\n        ;;\\n      test)\\n        docker build -t {{registry}}/mcp-prompts:$TAG-test -f docker/Dockerfile.testing .\\n        echo -e \\\\\\\"${GREEN}Built: {{registry}}/mcp-prompts:$TAG-test${NC}\\\\\\\"\\n        ;;\\n      *)\\n        echo -e \\\\\\\"${RED}Image building not supported for environment: $ENV${NC}\\\\\\\"\\n        exit 1\\n        ;;\\n    esac\\n    ;;\\n  publish)\\n    echo -e \\\\\\\"${GREEN}Building and publishing Docker images with tag: $TAG${NC}\\\\\\\"\\n    \\n    # Build images\\n    docker build -t {{registry}}/mcp-prompts:$TAG -f docker/Dockerfile.prod .\\n    docker build -t {{registry}}/mcp-prompts:$TAG-dev -f docker/Dockerfile.development .\\n    docker build -t {{registry}}/mcp-prompts:$TAG-test -f docker/Dockerfile.testing .\\n    \\n    # Push images\\n    echo -e \\\\\\\"${GREEN}Publishing images to Docker registry${NC}\\\\\\\"\\n    docker push {{registry}}/mcp-prompts:$TAG\\n    docker push {{registry}}/mcp-prompts:$TAG-dev\\n    docker push {{registry}}/mcp-prompts:$TAG-test\\n    \\n    echo -e \\\\\\\"${GREEN}Published images:${NC}\\\\\\\"\\n    echo -e \\\\\\\"  {{registry}}/mcp-prompts:$TAG\\\\\\\"\\n    echo -e \\\\\\\"  {{registry}}/mcp-prompts:$TAG-dev\\\\\\\"\\n    echo -e \\\\\\\"  {{registry}}/mcp-prompts:$TAG-test\\\\\\\"\\n    ;;\\n  *)\\n    echo -e \\\\\\\"${RED}Invalid command: $COMMAND${NC}\\\\\\\"\\n    show_help\\n    exit 1\\n    ;;\\nesac\\n```\\n\\nMake the script executable:\\n\\n```bash\\nchmod +x docker-compose-manager.sh\\n```\\n\\n## Launching the Environment\\n\\n### 1. Start the Base Environment\\n\\n```bash\\n./docker-compose-manager.sh up base -d\\n```\\n\\n### 2. Start with MCP Integration\\n\\n```bash\\n./docker-compose-manager.sh up integration -d\\n```\\n\\n### 3. Start with PostgreSQL Storage\\n\\n```bash\\n./docker-compose-manager.sh up postgres -d\\n```\\n\\n### 4. Start with PGAI Vector Storage\\n\\n```bash\\n./docker-compose-manager.sh up pgai -d\\n```\\n\\n## Environment Configuration\\n\\n### Core Services Configuration\\n\\n1. **MCP Prompts Server Configuration**\\n   ```\\n   # Server Configuration\\n   PORT=3000\\n   HOST=0.0.0.0\\n   NODE_ENV=production\\n   LOG_LEVEL=info\\n   \\n   # Storage Configuration\\n   STORAGE_TYPE=file  # Options: file, postgres, pgai\\n   PROMPTS_DIR=/app/data/prompts\\n   BACKUPS_DIR=/app/data/backups\\n   \\n   # Integration Configuration\\n   MCP_INTEGRATION=true\\n   MCP_MEMORY_URL=http://mcp-memory:3000\\n   MCP_FILESYSTEM_URL=http://mcp-filesystem:3000\\n   MCP_GITHUB_URL=http://mcp-github:3000\\n   MCP_THINKING_URL=http://mcp-sequential-thinking:3000\\n   MCP_ELEVENLABS_URL=http://mcp-elevenlabs:3000\\n   ```\\n\\n2. **GitHub Integration**\\n   ```\\n   # GitHub API Configuration\\n   GITHUB_PERSONAL_ACCESS_TOKEN=your_token_here\\n   ```\\n\\n3. **ElevenLabs Integration**\\n   ```\\n   # ElevenLabs API Configuration\\n   ELEVENLABS_API_KEY=your_api_key_here\\n   ELEVENLABS_VOICE_ID=your_voice_id\\n   ELEVENLABS_MODEL_ID=eleven_monolingual_v1\\n   ELEVENLABS_OUTPUT_DIR=/data/audio\\n   ```\\n\\n### PostgreSQL Configuration\\n\\n```\\n# PostgreSQL Configuration\\nPOSTGRES_USER=postgres\\nPOSTGRES_PASSWORD=secure_password_here\\nPOSTGRES_DATABASE=mcp_prompts\\n```\\n\\n### PGAI/TimescaleDB Configuration\\n\\n```\\n# PGAI Configuration\\nPGAI_HOST=pgai\\nPGAI_PORT=5432\\nPGAI_USER=postgres\\nPGAI_PASSWORD=postgres\\nPGAI_DATABASE=mcp_prompts\\nPGAI_API_KEY=your_pgai_key_here\\nPGAI_COLLECTION=mcp_prompts\\n```\\n\\n## Integration Verification\\n\\n### 1. Health Check\\n\\nCheck if all services are running:\\n\\n```bash\\n./docker-compose-manager.sh ps integration\\n```\\n\\n### 2. Test MCP Prompts Server\\n\\n```bash\\ncurl http://localhost:3000/health\\n```\\n\\n### 3. Test Resource Servers\\n\\n```bash\\n# Test Memory Server\\ncurl http://localhost:3020/health\\n\\n# Test Filesystem Server\\ncurl http://localhost:3021/health\\n\\n# Test GitHub Server\\ncurl http://localhost:3022/health\\n\\n# Test Sequential Thinking Server\\ncurl http://localhost:3023/health\\n\\n# Test ElevenLabs Server\\ncurl http://localhost:3024/health\\n```\\n\\n## Troubleshooting Common Issues\\n\\n### Container Startup Issues\\n\\n1. **Container fails to start**\\n   - Check logs: `./docker-compose-manager.sh logs integration`\\n   - Verify environment variables are correctly set\\n   - Ensure ports are not already in use\\n\\n2. **Network connectivity issues**\\n   - Verify all containers are on the same network\\n   - Check Docker network configuration: `docker network inspect mcp-network`\\n\\n3. **Storage issues**\\n   - Ensure volume permissions are correctly set\\n   - Verify database initialization scripts are valid\\n\\n## Resource Management\\n\\n### Clean Up Unused Resources\\n\\n```bash\\n# Remove stopped containers\\ndocker container prune\\n\\n# Remove unused volumes\\ndocker volume prune\\n\\n# Remove unused networks\\ndocker network prune\\n\\n# Remove dangling images\\ndocker image prune\\n```\\n\\n### Data Persistence\\n\\nDocker volumes ensure your data persists across container restarts:\\n\\n```\\nvolumes:\\n  mcp-data:              # MCP Prompts data\\n  mcp-filesystem-data:   # Filesystem server data\\n  mcp-elevenlabs-data:   # Audio output data\\n  mcp-prompts-postgres-data:  # PostgreSQL data\\n  mcp-prompts-pgai-data:      # PGAI/TimescaleDB data\\n```\\n\\n## Best Practices for Production\\n\\n1. **Security Considerations**\\n   - Use environment files for secrets\\n   - Configure proper network isolation\\n   - Set up user permissions for service accounts\\n   - Enable HTTPS with proper certificates\\n\\n2. **High Availability**\\n   - Implement container restart policies\\n   - Consider Docker Swarm or Kubernetes for clustering\\n   - Set up monitoring and alerting\\n   - Establish backup and recovery procedures\\n\\n3. **Performance Optimization**\\n   - Tune PostgreSQL/PGAI for your workload\\n   - Configure appropriate resource limits\\n   - Implement caching strategies\\n   - Monitor resource usage\\n\\n## Advanced Customization\\n\\n### Adding Custom MCP Servers\\n\\n1. Create a Dockerfile for your custom server\\n2. Add the service to your Docker Compose file\\n3. Configure environment variables for integration\\n4. Update the MCP Prompts server configuration\\n\\n### Extending with Additional Services\\n\\n```yaml\\nservices:\\n  # Your custom MCP server\\n  mcp-custom:\\n    image: node:20-alpine\\n    container_name: mcp-custom\\n    command: sh -c \\\\\\\"npm install -g your-custom-mcp-server && npx -y your-custom-mcp-server\\\\\\\"\\n    environment:\\n      - CUSTOM_API_KEY={{custom_api_key}}\\n    ports:\\n      - \\\\\\\"3025:3000\\\\\\\"\\n    restart: unless-stopped\\n    networks:\\n      - mcp-network\\n```\\n\\n## Next Steps\\n\\n1. Explore integration with AI clients like Claude Desktop, Zed, and LibreChat\\n2. Implement monitoring and logging solutions\\n3. Set up CI/CD pipelines for deployment\\n4. Explore advanced use cases for your specific domain\\n\\n## Additional Resources\\n\\n- [MCP Protocol Documentation](https://modelcontextprotocol.io/)\\n- [Docker Documentation](https://docs.docker.com/)\\n- [MCP Servers Repository](https://github.com/modelcontextprotocol/servers)\\n- {{additional_resources}}\\n\\nWhat specific aspect of this Docker-based MCP integration would you like me to elaborate on further?\\\",\\n  \\\"isTemplate\\\": true,\\n  \\\"variables\\\": [\\n    \\\"use_case\\\",\\n    \\\"additional_prerequisites\\\",\\n    \\\"additional_servers\\\",\\n    \\\"registry\\\",\\n    \\\"github_token\\\",\\n    \\\"elevenlabs_api_key\\\",\\n    \\\"elevenlabs_voice_id\\\",\\n    \\\"elevenlabs_model_id\\\",\\n    \\\"postgres_user\\\",\\n    \\\"postgres_password\\\",\\n    \\\"postgres_database\\\",\\n    \\\"pgai_api_key\\\",\\n    \\\"custom_api_key\\\",\\n    \\\"additional_resources\\\"\\n  ],\\n  \\\"tags\\\": [\\n    \\\"docker\\\",\\n    \\\"mcp-integration\\\",\\n    \\\"multi-server\\\",\\n    \\\"orchestration\\\",\\n    \\\"containerization\\\",\\n    \\\"devops\\\",\\n    \\\"tutorial\\\"\\n  ],\\n  \\\"createdAt\\\": \\\"2025-03-15T21:00:00.000Z\\\",\\n  \\\"updatedAt\\\": \\\"2025-03-15T21:00:00.000Z\\\",\\n  \\\"version\\\": 1,\\n  \\\"metadata\\\": {\\n    \\\"recommended_servers\\\": [\\n      \\\"@modelcontextprotocol/server-filesystem\\\",\\n      \\\"@modelcontextprotocol/server-memory\\\",\\n      \\\"@modelcontextprotocol/server-github\\\",\\n      \\\"@modelcontextprotocol/server-sequential-thinking\\\",\\n      \\\"elevenlabs-mcp-server\\\"\\n    ],\\n    \\\"example_values\\\": {\\n      \\\"use_case\\\": \\\"AI-powered code analysis and documentation\\\",\\n      \\\"additional_prerequisites\\\": \\\"Node.js 18+ for local development\\\",\\n      \\\"registry\\\": \\\"sparesparrow\\\",\\n      \\\"postgres_user\\\": \\\"postgres\\\",\\n      \\\"postgres_password\\\": \\\"secure_password_here\\\",\\n      \\\"postgres_database\\\": \\\"mcp_prompts",
  "variables": {},
  "metadata": {
    "source": "/home/sparrow/projects/mcp-prompts/prompts/docker-mcp-servers-orchestration.json",
    "imported": true
  }
}
```

--------------------------------------------------------------------------------
/printcast-agent/src/orchestration/workflow.py:
--------------------------------------------------------------------------------

```python
"""
Main workflow orchestrator for PrintCast Agent.

Coordinates the entire voice-to-print-to-delivery workflow.
"""

import asyncio
import json
from typing import Any, Dict, List, Optional
from datetime import datetime
from enum import Enum

import structlog
from pydantic import BaseModel, Field

from ..integrations.asterisk import AsteriskManager
from ..integrations.elevenlabs import ElevenLabsAgent
from ..integrations.content import ContentFetcher, ContentItem
from ..integrations.printing import PrintManager
from ..integrations.delivery import DeliveryService, Address

logger = structlog.get_logger(__name__)


class WorkflowState(Enum):
    """Workflow states."""
    IDLE = "idle"
    CALL_INITIATED = "call_initiated"
    GREETING = "greeting"
    CONTENT_SELECTION = "content_selection"
    USER_SELECTION = "user_selection"
    ADDRESS_COLLECTION = "address_collection"
    CONFIRMATION = "confirmation"
    PROCESSING = "processing"
    PRINTING = "printing"
    SHIPPING = "shipping"
    COMPLETED = "completed"
    FAILED = "failed"
    CANCELLED = "cancelled"


class WorkflowContext(BaseModel):
    """Context for workflow execution."""
    
    workflow_id: str
    session_id: str
    caller_id: str
    state: WorkflowState = WorkflowState.IDLE
    language: str = "cs"
    content_type: Optional[str] = None
    available_content: List[ContentItem] = Field(default_factory=list)
    selected_items: List[str] = Field(default_factory=list)
    delivery_address: Optional[Address] = None
    delivery_method: str = "post"
    print_job_ids: List[str] = Field(default_factory=list)
    shipment_id: Optional[str] = None
    start_time: datetime = Field(default_factory=datetime.now)
    end_time: Optional[datetime] = None
    metadata: Dict[str, Any] = Field(default_factory=dict)
    error: Optional[str] = None


class WorkflowOrchestrator:
    """
    Orchestrates the complete voice-to-print workflow.
    
    Manages state transitions and coordinates all services.
    """
    
    def __init__(
        self,
        asterisk: AsteriskManager,
        elevenlabs: ElevenLabsAgent,
        content: ContentFetcher,
        printer: PrintManager,
        delivery: DeliveryService
    ):
        """
        Initialize workflow orchestrator.
        
        Args:
            asterisk: Asterisk manager
            elevenlabs: ElevenLabs agent
            content: Content fetcher
            printer: Print manager
            delivery: Delivery service
        """
        self.asterisk = asterisk
        self.elevenlabs = elevenlabs
        self.content = content
        self.printer = printer
        self.delivery = delivery
        
        self.workflows: Dict[str, WorkflowContext] = {}
        self.workflow_counter = 0
        
        logger.info("Workflow orchestrator initialized")
    
    async def start_workflow(
        self,
        caller_id: str,
        session_id: str,
        language: str = "cs"
    ) -> str:
        """
        Start a new workflow for incoming call.
        
        Args:
            caller_id: Caller phone number
            session_id: Call session ID
            language: Preferred language
        
        Returns:
            Workflow ID
        """
        try:
            # Create workflow context
            self.workflow_counter += 1
            workflow_id = f"wf_{self.workflow_counter}_{datetime.now().strftime('%Y%m%d%H%M%S')}"
            
            context = WorkflowContext(
                workflow_id=workflow_id,
                session_id=session_id,
                caller_id=caller_id,
                language=language,
                state=WorkflowState.CALL_INITIATED
            )
            
            self.workflows[workflow_id] = context
            
            # Start workflow execution
            asyncio.create_task(self._execute_workflow(workflow_id))
            
            logger.info(
                "Workflow started",
                workflow_id=workflow_id,
                caller_id=caller_id,
                session_id=session_id
            )
            
            return workflow_id
            
        except Exception as e:
            logger.error("Failed to start workflow", error=str(e))
            raise
    
    async def _execute_workflow(self, workflow_id: str):
        """
        Execute the complete workflow.
        
        Args:
            workflow_id: Workflow ID
        """
        context = self.workflows.get(workflow_id)
        if not context:
            return
        
        try:
            # State machine execution
            while context.state not in [WorkflowState.COMPLETED, WorkflowState.FAILED, WorkflowState.CANCELLED]:
                
                if context.state == WorkflowState.CALL_INITIATED:
                    await self._handle_call_initiated(context)
                    
                elif context.state == WorkflowState.GREETING:
                    await self._handle_greeting(context)
                    
                elif context.state == WorkflowState.CONTENT_SELECTION:
                    await self._handle_content_selection(context)
                    
                elif context.state == WorkflowState.USER_SELECTION:
                    await self._handle_user_selection(context)
                    
                elif context.state == WorkflowState.ADDRESS_COLLECTION:
                    await self._handle_address_collection(context)
                    
                elif context.state == WorkflowState.CONFIRMATION:
                    await self._handle_confirmation(context)
                    
                elif context.state == WorkflowState.PROCESSING:
                    await self._handle_processing(context)
                    
                elif context.state == WorkflowState.PRINTING:
                    await self._handle_printing(context)
                    
                elif context.state == WorkflowState.SHIPPING:
                    await self._handle_shipping(context)
                    
                else:
                    logger.warning(
                        "Unknown workflow state",
                        state=context.state,
                        workflow_id=workflow_id
                    )
                    context.state = WorkflowState.FAILED
                    
                # Small delay between state transitions
                await asyncio.sleep(0.1)
            
            # Workflow completed
            context.end_time = datetime.now()
            duration = (context.end_time - context.start_time).total_seconds()
            
            logger.info(
                "Workflow completed",
                workflow_id=workflow_id,
                state=context.state,
                duration=duration
            )
            
        except Exception as e:
            logger.error(
                "Workflow execution failed",
                workflow_id=workflow_id,
                error=str(e)
            )
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def _handle_call_initiated(self, context: WorkflowContext):
        """Handle call initiated state."""
        try:
            # Start ElevenLabs conversation
            await self.elevenlabs.start_conversation(
                session_id=context.session_id,
                language=context.language
            )
            
            context.state = WorkflowState.GREETING
            
        except Exception as e:
            logger.error("Failed to initiate call", error=str(e))
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def _handle_greeting(self, context: WorkflowContext):
        """Handle greeting state."""
        try:
            # Generate and play greeting
            greeting = self._get_greeting_text(context.language)
            
            response = await self.elevenlabs.text_to_speech(
                greeting,
                language=context.language
            )
            
            # Play audio through Asterisk
            # In production, would stream audio through SIP
            
            context.state = WorkflowState.CONTENT_SELECTION
            
        except Exception as e:
            logger.error("Failed to play greeting", error=str(e))
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def _handle_content_selection(self, context: WorkflowContext):
        """Handle content type selection."""
        try:
            # Ask user what content they want
            prompt = self._get_content_selection_prompt(context.language)
            
            await self.elevenlabs.send_message(
                context.session_id,
                prompt
            )
            
            # Wait for user response (simulated)
            await asyncio.sleep(2)
            
            # For demo, default to GitHub trending
            context.content_type = "github"
            
            # Fetch content
            context.available_content = await self.content.fetch_github_trending(
                limit=5
            )
            
            # Generate summary
            summary = await self.elevenlabs.generate_content_summary(
                [item.dict() for item in context.available_content],
                language=context.language,
                max_items=5
            )
            
            # Read summary to user
            await self.elevenlabs.send_message(
                context.session_id,
                summary
            )
            
            context.state = WorkflowState.USER_SELECTION
            
        except Exception as e:
            logger.error("Failed in content selection", error=str(e))
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def _handle_user_selection(self, context: WorkflowContext):
        """Handle user's content selection."""
        try:
            # Wait for user selection (simulated)
            # In production, would process DTMF or voice input
            await asyncio.sleep(3)
            
            # For demo, select first two items
            if len(context.available_content) >= 2:
                context.selected_items = [
                    context.available_content[0].id,
                    context.available_content[1].id
                ]
            else:
                context.selected_items = [item.id for item in context.available_content]
            
            # Confirm selection
            confirmation = self._get_selection_confirmation(
                context.selected_items,
                context.language
            )
            
            await self.elevenlabs.send_message(
                context.session_id,
                confirmation
            )
            
            context.state = WorkflowState.ADDRESS_COLLECTION
            
        except Exception as e:
            logger.error("Failed in user selection", error=str(e))
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def _handle_address_collection(self, context: WorkflowContext):
        """Handle delivery address collection."""
        try:
            # Ask for delivery address
            prompt = self._get_address_prompt(context.language)
            
            await self.elevenlabs.send_message(
                context.session_id,
                prompt
            )
            
            # For demo, use default address
            context.delivery_address = Address(
                name="Test Recipient",
                street="Václavské náměstí 1",
                city="Praha",
                postal_code="11000",
                country="CZ",
                phone=context.caller_id
            )
            
            # Confirm address
            address_confirmation = self._format_address_confirmation(
                context.delivery_address,
                context.language
            )
            
            await self.elevenlabs.send_message(
                context.session_id,
                address_confirmation
            )
            
            context.state = WorkflowState.CONFIRMATION
            
        except Exception as e:
            logger.error("Failed in address collection", error=str(e))
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def _handle_confirmation(self, context: WorkflowContext):
        """Handle order confirmation."""
        try:
            # Generate final confirmation
            summary = self._generate_order_summary(context)
            
            await self.elevenlabs.send_message(
                context.session_id,
                summary
            )
            
            # Wait for confirmation (simulated)
            await asyncio.sleep(2)
            
            # Assume confirmed
            context.state = WorkflowState.PROCESSING
            
            # Thank user
            thanks = self._get_thank_you_message(context.language)
            await self.elevenlabs.send_message(
                context.session_id,
                thanks
            )
            
        except Exception as e:
            logger.error("Failed in confirmation", error=str(e))
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def _handle_processing(self, context: WorkflowContext):
        """Handle order processing."""
        try:
            # Process the order
            result = await self.process_order(
                context.session_id,
                context.selected_items,
                context.delivery_address.dict() if context.delivery_address else {},
                context.delivery_method
            )
            
            context.print_job_ids = result.get("print_jobs", [])
            context.shipment_id = result.get("shipment_id")
            
            context.state = WorkflowState.PRINTING
            
        except Exception as e:
            logger.error("Failed in processing", error=str(e))
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def _handle_printing(self, context: WorkflowContext):
        """Handle printing state."""
        try:
            # Monitor print jobs
            all_completed = True
            
            for job_id in context.print_job_ids:
                status = self.printer.get_job_status(job_id)
                if status and status["status"] not in ["completed", "simulated"]:
                    all_completed = False
            
            if all_completed:
                context.state = WorkflowState.SHIPPING
            else:
                # Wait and check again
                await asyncio.sleep(5)
                
        except Exception as e:
            logger.error("Failed in printing", error=str(e))
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def _handle_shipping(self, context: WorkflowContext):
        """Handle shipping state."""
        try:
            if context.shipment_id:
                # Mark as shipped
                await self.delivery.ship_package(context.shipment_id)
            
            context.state = WorkflowState.COMPLETED
            
        except Exception as e:
            logger.error("Failed in shipping", error=str(e))
            context.state = WorkflowState.FAILED
            context.error = str(e)
    
    async def process_order(
        self,
        session_id: str,
        selected_items: List[str],
        delivery_address: Dict[str, Any],
        delivery_method: str = "post"
    ) -> Dict[str, Any]:
        """
        Process complete order from selection to shipping.
        
        Args:
            session_id: Session ID
            selected_items: Selected content IDs
            delivery_address: Delivery address
            delivery_method: Delivery method
        
        Returns:
            Order result with tracking information
        """
        try:
            # Get selected content
            content_items = await self.content.get_content_by_ids(selected_items)
            
            if not content_items:
                raise ValueError("No content items found")
            
            # Format content for printing
            formatted_content = self.content.format_for_print(
                content_items,
                format="markdown"
            )
            
            # Generate PDF
            pdf_path = await self.printer.generate_pdf(
                formatted_content,
                title=f"PrintCast Order {session_id}"
            )
            
            # Print document
            print_job_id = await self.printer.print_document(pdf_path)
            
            # Create shipment
            address = Address(**delivery_address) if isinstance(delivery_address, dict) else delivery_address
            
            shipment_id = await self.delivery.create_shipment(
                recipient=address,
                method=delivery_method,
                weight=100,  # Estimate
                metadata={
                    "session_id": session_id,
                    "content_count": len(content_items)
                }
            )
            
            # Get tracking info
            tracking_info = self.delivery.get_shipment_status(shipment_id)
            
            logger.info(
                "Order processed",
                session_id=session_id,
                print_job=print_job_id,
                shipment=shipment_id
            )
            
            return {
                "success": True,
                "session_id": session_id,
                "print_jobs": [print_job_id],
                "shipment_id": shipment_id,
                "tracking_number": tracking_info.get("tracking_number") if tracking_info else None,
                "estimated_delivery": tracking_info.get("estimated_delivery") if tracking_info else None,
                "total_items": len(content_items)
            }
            
        except Exception as e:
            logger.error("Failed to process order", error=str(e))
            raise
    
    def _get_greeting_text(self, language: str) -> str:
        """Get greeting text."""
        greetings = {
            "cs": "Dobrý den! Vítejte v PrintCast. Mohu vám pomoci vytisknout a doručit nejnovější trendy z GitHubu, RSS kanálů nebo zpráv. Co by vás zajímalo?",
            "en": "Hello! Welcome to PrintCast. I can help you print and deliver the latest trends from GitHub, RSS feeds, or news. What would you like to explore?"
        }
        return greetings.get(language, greetings["en"])
    
    def _get_content_selection_prompt(self, language: str) -> str:
        """Get content selection prompt."""
        prompts = {
            "cs": "Řekněte 'GitHub' pro trendující repozitáře, 'RSS' pro nejnovější články, nebo 'zprávy' pro aktuální novinky.",
            "en": "Say 'GitHub' for trending repositories, 'RSS' for latest articles, or 'news' for current news."
        }
        return prompts.get(language, prompts["en"])
    
    def _get_selection_confirmation(self, items: List[str], language: str) -> str:
        """Get selection confirmation."""
        count = len(items)
        if language == "cs":
            return f"Vybrali jste {count} položek k tisku. Nyní potřebuji vaši doručovací adresu."
        else:
            return f"You've selected {count} items to print. Now I need your delivery address."
    
    def _get_address_prompt(self, language: str) -> str:
        """Get address prompt."""
        prompts = {
            "cs": "Prosím, řekněte mi vaši doručovací adresu včetně jména, ulice, města a PSČ.",
            "en": "Please tell me your delivery address including name, street, city, and postal code."
        }
        return prompts.get(language, prompts["en"])
    
    def _format_address_confirmation(self, address: Address, language: str) -> str:
        """Format address confirmation."""
        if language == "cs":
            return f"Doručovací adresa: {address.name}, {address.street}, {address.postal_code} {address.city}. Je to správně?"
        else:
            return f"Delivery address: {address.name}, {address.street}, {address.postal_code} {address.city}. Is this correct?"
    
    def _generate_order_summary(self, context: WorkflowContext) -> str:
        """Generate order summary."""
        items_count = len(context.selected_items)
        
        if context.language == "cs":
            return f"Shrnutí objednávky: {items_count} položek k tisku, doručení {context.delivery_method} na adresu {context.delivery_address.city if context.delivery_address else 'neznámá'}. Potvrzujete objednávku?"
        else:
            return f"Order summary: {items_count} items to print, {context.delivery_method} delivery to {context.delivery_address.city if context.delivery_address else 'unknown'}. Do you confirm the order?"
    
    def _get_thank_you_message(self, language: str) -> str:
        """Get thank you message."""
        messages = {
            "cs": "Děkuji za vaši objednávku! Vaše dokumenty budou vytištěny a odeslány. Obdržíte sledovací číslo SMS zprávou.",
            "en": "Thank you for your order! Your documents will be printed and shipped. You'll receive a tracking number via SMS."
        }
        return messages.get(language, messages["en"])
    
    async def cancel_workflow(self, workflow_id: str, reason: str = "user_request") -> bool:
        """
        Cancel a workflow.
        
        Args:
            workflow_id: Workflow ID
            reason: Cancellation reason
        
        Returns:
            True if cancelled successfully
        """
        context = self.workflows.get(workflow_id)
        if not context:
            return False
        
        if context.state in [WorkflowState.COMPLETED, WorkflowState.FAILED, WorkflowState.CANCELLED]:
            return False
        
        try:
            # Cancel print jobs
            for job_id in context.print_job_ids:
                await self.printer.cancel_print_job(job_id)
            
            # Cancel shipment
            if context.shipment_id:
                await self.delivery.cancel_shipment(context.shipment_id)
            
            # End conversation
            await self.elevenlabs.end_conversation(context.session_id)
            
            context.state = WorkflowState.CANCELLED
            context.end_time = datetime.now()
            context.metadata["cancellation_reason"] = reason
            
            logger.info(
                "Workflow cancelled",
                workflow_id=workflow_id,
                reason=reason
            )
            
            return True
            
        except Exception as e:
            logger.error(
                "Failed to cancel workflow",
                workflow_id=workflow_id,
                error=str(e)
            )
            return False
    
    def get_workflow_status(self, workflow_id: str) -> Optional[Dict[str, Any]]:
        """Get workflow status."""
        context = self.workflows.get(workflow_id)
        if not context:
            return None
        
        duration = None
        if context.end_time:
            duration = (context.end_time - context.start_time).total_seconds()
        elif context.state not in [WorkflowState.COMPLETED, WorkflowState.FAILED, WorkflowState.CANCELLED]:
            duration = (datetime.now() - context.start_time).total_seconds()
        
        return {
            "workflow_id": workflow_id,
            "session_id": context.session_id,
            "caller_id": context.caller_id,
            "state": context.state.value,
            "language": context.language,
            "selected_items": len(context.selected_items),
            "print_jobs": context.print_job_ids,
            "shipment_id": context.shipment_id,
            "start_time": context.start_time.isoformat(),
            "end_time": context.end_time.isoformat() if context.end_time else None,
            "duration_seconds": duration,
            "error": context.error
        }
```

--------------------------------------------------------------------------------
/data/prompts/templates/mcp-code-generator.json:
--------------------------------------------------------------------------------

```json
{
  "id": "unknown-id",
  "name": "mcp-code-generator",
  "description": "An advanced code generation prompt that leverages multiple MCP resources to create contextually-aware, high-quality code with minimal hallucination.",
  "content": " \\\"mcp-code-generator\\\",\\n  \\\"version\\\": \\\"1.0.0\\\",\\n  \\\"description\\\": \\\"An advanced code generation prompt that leverages multiple MCP resources to create contextually-aware, high-quality code with minimal hallucination.\\\",\\n  \\\"prompt_text\\\": \\\"# MCP-Powered Code Generator\\\\n\\\\nYou are an expert coding assistant with access to multiple MCP resources. Your task is to generate high-quality, contextually-appropriate code based on the user's requirements while leveraging the following MCP resources to reduce hallucination and improve accuracy:\\\\n\\\\n- **Filesystem** (@file:// URIs): Access to project files and directory structure\\\\n- **GitHub** (@github:// URIs): Access to repositories, code examples, and documentation\\\\n- **Sequential Thinking** (@thinking:// URIs): Step-by-step reasoning for complex algorithms\\\\n- **Memory** (@memory:// URIs): Previous code snippets and user preferences\\\\n\\\\n## Code Generation Process\\\\n\\\\n1. **Analyze Requirements**\\\\n   - Break down the user's request into specific coding tasks\\\\n   - Identify key functionalities, interfaces, and constraints\\\\n   - Determine appropriate language, framework, or library to use\\\\n\\\\n2. **Resource Collection**\\\\n   - Check current project structure (if available): `@file:///project`\\\\n   - Find related examples on GitHub: `@github://relevant-repos`\\\\n   - Retrieve user preferences if available: `@memory://coding-preferences`\\\\n\\\\n3. **Design Phase**\\\\n   - Create a high-level design outline\\\\n   - Determine classes, functions, or components needed\\\\n   - Establish interfaces and relationships\\\\n\\\\n4. **Implementation Phase**\\\\n   - Write clean, well-documented code that follows best practices\\\\n   - Include proper error handling and edge cases\\\\n   - Ensure compatibility with existing codebase (if applicable)\\\\n   - Add appropriate comments and documentation\\\\n\\\\n5. **Testing Considerations**\\\\n   - Include unit test examples or strategies when appropriate\\\\n   - Consider edge cases and potential failures\\\\n   - Provide sample usage examples\\\\n\\\\n## Code Quality Guidelines\\\\n\\\\n- **Readability**: Write clear, self-explanatory code with consistent formatting\\\\n- **Maintainability**: Use descriptive variable names and follow language conventions\\\\n- **Performance**: Consider algorithmic efficiency and resource usage\\\\n- **Security**: Follow security best practices and avoid common vulnerabilities\\\\n- **Reusability**: Create modular, reusable components when appropriate\\\\n\\\\n## Output Format\\\\n\\\\nYour response should include:\\\\n\\\\n1. A brief explanation of the approach taken\\\\n2. The generated code in properly formatted code blocks\\\\n3. Installation instructions or dependencies (if applicable)\\\\n4. Usage examples\\\\n5. References to any MCP resources used\\\\n\\\\n## Contextual Adaptation\\\\n\\\\nTailor your code generation based on:\\\\n\\\\n- The programming language specified or inferred from context\\\\n- The user's preferred coding style (if known)\\\\n- The complexity level appropriate for the task\\\\n- The target environment (web, mobile, desktop, server, etc.)\\\\n\\\\n{{code_requirements}}\\\\n\\\\n{{additional_context}}\\\",\\n  \\\"variables\\\": [\\n    \\\"code_requirements\\\",\\n    \\\"additional_context\\\"\\n  ],\\n  \\\"tags\\\": [\\n    \\\"code-generation\\\",\\n    \\\"multi-resource\\\",\\n    \\\"mcp-integration\\\",\\n    \\\"development\\\",\\n    \\\"programming\\\"\\n  ],\\n  \\\"examples\\\": [\\n    {\\n      \\\"name\\\": \\\"React Component Generator\\\",\\n      \\\"variables\\\": {\\n        \\\"code_requirements\\\": \\\"Create a React component for a customizable data table with sorting, filtering, and pagination capabilities. The component should be reusable across our application.\\\",\\n        \\\"additional_context\\\": \\\"Our project uses TypeScript, React 18, and follows a functional component approach with hooks. We prefer using styled-components for styling. The existing component structure can be found at @file:///project/src/components/.\\\"\\n      },\\n      \\\"expected_response\\\": \\\"# Customizable Data Table Component\\\\n\\\\nI'll create a reusable React component for a data table with sorting, filtering, and pagination capabilities, following your project's TypeScript and React 18 standards with styled-components for styling.\\\\n\\\\n## Approach\\\\n\\\\nAfter examining your project structure at `@file:///project/src/components/`, I notice you're using a functional component pattern with hooks. I'll create:\\\\n\\\\n1. A main `DataTable` component that handles the core functionality\\\\n2. Several sub-components for table elements (header, row, cell, pagination)\\\\n3. Custom hooks for sorting, filtering, and pagination logic\\\\n4. TypeScript interfaces for strong typing\\\\n\\\\n## Component Structure\\\\n\\\\n```typescript\\\\n// DataTable.tsx\\\\nimport React, { useState, useMemo, useCallback } from 'react';\\\\nimport styled from 'styled-components';\\\\nimport { TableHeader } from './TableHeader';\\\\nimport { TableRow } from './TableRow';\\\\nimport { Pagination } from './Pagination';\\\\nimport { useSort } from '../hooks/useSort';\\\\nimport { useFilter } from '../hooks/useFilter';\\\\nimport { usePagination } from '../hooks/usePagination';\\\\n\\\\n// TypeScript interfaces\\\\nexport interface Column<T> {\\\\n  key: string;\\\\n  header: string;\\\\n  renderCell?: (item: T) => React.ReactNode;\\\\n  sortable?: boolean;\\\\n  filterable?: boolean;\\\\n}\\\\n\\\\nexport interface DataTableProps<T> {\\\\n  data: T[];\\\\n  columns: Column<T>[];\\\\n  initialSortKey?: string;\\\\n  initialSortDirection?: 'asc' | 'desc';\\\\n  rowsPerPageOptions?: number[];\\\\n  initialRowsPerPage?: number;\\\\n  onRowClick?: (item: T) => void;\\\\n  className?: string;\\\\n}\\\\n\\\\n// Styled components\\\\nconst TableContainer = styled.div`\\\\n  width: 100%;\\\\n  overflow-x: auto;\\\\n  border-radius: 4px;\\\\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\\\\n`;\\\\n\\\\nconst Table = styled.table`\\\\n  width: 100%;\\\\n  border-collapse: collapse;\\\\n  font-size: 14px;\\\\n`;\\\\n\\\\nconst TableBody = styled.tbody`\\\\n  & tr:nth-child(odd) {\\\\n    background-color: #f9f9f9;\\\\n  }\\\\n  \\\\n  & tr:hover {\\\\n    background-color: #f1f1f1;\\\\n  }\\\\n`;\\\\n\\\\nconst FilterContainer = styled.div`\\\\n  margin-bottom: 16px;\\\\n  display: flex;\\\\n  justify-content: flex-end;\\\\n`;\\\\n\\\\nconst FilterInput = styled.input`\\\\n  padding: 8px 12px;\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 4px;\\\\n  font-size: 14px;\\\\n  width: 250px;\\\\n`;\\\\n\\\\n// Main component\\\\nexport function DataTable<T extends Record<string, any>>({ \\\\n  data, \\\\n  columns, \\\\n  initialSortKey,\\\\n  initialSortDirection = 'asc',\\\\n  rowsPerPageOptions = [10, 25, 50],\\\\n  initialRowsPerPage = 10,\\\\n  onRowClick,\\\\n  className\\\\n}: DataTableProps<T>) {\\\\n  // Global filter state\\\\n  const [filterValue, setFilterValue] = useState('');\\\\n  \\\\n  // Hook usage\\\\n  const { sortedData, sortKey, sortDirection, handleSort } = useSort(data, initialSortKey, initialSortDirection);\\\\n  const { filteredData } = useFilter(sortedData, filterValue, columns);\\\\n  const { \\\\n    currentPageData, \\\\n    currentPage, \\\\n    totalPages, \\\\n    rowsPerPage,\\\\n    setCurrentPage, \\\\n    setRowsPerPage \\\\n  } = usePagination(filteredData, initialRowsPerPage);\\\\n\\\\n  // Filter change handler\\\\n  const handleFilterChange = useCallback(\\\\n    (e: React.ChangeEvent<HTMLInputElement>) => {\\\\n      setFilterValue(e.target.value);\\\\n      setCurrentPage(1); // Reset to first page when filtering\\\\n    }, \\\\n    [setCurrentPage]\\\\n  );\\\\n\\\\n  // Memoize filterable columns\\\\n  const filterableColumns = useMemo(\\\\n    () => columns.filter(column => column.filterable),\\\\n    [columns]\\\\n  );\\\\n\\\\n  return (\\\\n    <div className={className}>\\\\n      {filterableColumns.length > 0 && (\\\\n        <FilterContainer>\\\\n          <FilterInput \\\\\\n            type=\\\\\\\"text\\\\\\\" \\\\\\n            placeholder=\\\\\\\"Filter table...\\\\\\\"\\\\\\n            value={filterValue}\\\\\\n            onChange={handleFilterChange}\\\\\\n          />\\\\\\n        </FilterContainer>\\\\\\n      )}\\\\\\n      \\\\\\n      <TableContainer>\\\\\\n        <Table>\\\\\\n          <TableHeader \\\\\\n            columns={columns} \\\\\\n            sortKey={sortKey} \\\\\\n            sortDirection={sortDirection} \\\\\\n            onSort={handleSort} \\\\\\n          />\\\\\\n          <TableBody>\\\\\\n            {currentPageData.map((item, index) => (\\\\\\n              <TableRow \\\\\\n                key={index} \\\\\\n                item={item} \\\\\\n                columns={columns} \\\\\\n                onClick={onRowClick ? () => onRowClick(item) : undefined} \\\\\\n              />\\\\\\n            ))}\\\\\\n            {currentPageData.length === 0 && (\\\\\\n              <tr>\\\\\\n                <td colSpan={columns.length} style={{ textAlign: 'center', padding: '16px' }}>\\\\\\n                  No records found\\\\\\n                </td>\\\\\\n              </tr>\\\\\\n            )}\\\\\\n          </TableBody>\\\\\\n        </Table>\\\\\\n      </TableContainer>\\\\\\n      \\\\\\n      <Pagination \\\\\\n        currentPage={currentPage}\\\\\\n        totalPages={totalPages}\\\\\\n        rowsPerPage={rowsPerPage}\\\\\\n        rowsPerPageOptions={rowsPerPageOptions}\\\\\\n        onPageChange={setCurrentPage}\\\\\\n        onRowsPerPageChange={setRowsPerPage}\\\\\\n        totalItems={filteredData.length}\\\\\\n      />\\\\\\n    </div>\\\\\\n  );\\\\\\n}\\\\n```\\\\n\\\\n## Custom Hooks Implementation\\\\n\\\\n```typescript\\\\n// hooks/useSort.ts\\\\nimport { useState, useMemo } from 'react';\\\\n\\\\nexport function useSort<T extends Record<string, any>>(\\\\n  data: T[], \\\\\\n  initialSortKey?: string, \\\\\\n  initialSortDirection: 'asc' | 'desc' = 'asc'\\\\n) {\\\\n  const [sortKey, setSortKey] = useState<string | undefined>(initialSortKey);\\\\n  const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>(initialSortDirection);\\\\n\\\\n  const handleSort = (key: string) => {\\\\n    if (sortKey === key) {\\\\n      // Toggle direction if already sorting by this key\\\\n      setSortDirection(prev => prev === 'asc' ? 'desc' : 'asc');\\\\n    } else {\\\\n      // New sort key, set to ascending by default\\\\n      setSortKey(key);\\\\n      setSortDirection('asc');\\\\n    }\\\\n  };\\\\n\\\\n  const sortedData = useMemo(() => {\\\\n    if (!sortKey) return [...data];\\\\n\\\\n    return [...data].sort((a, b) => {\\\\n      const aValue = a[sortKey];\\\\n      const bValue = b[sortKey];\\\\n\\\\n      // Handle different data types\\\\n      if (typeof aValue === 'string' && typeof bValue === 'string') {\\\\n        return sortDirection === 'asc' \\\\\\n          ? aValue.localeCompare(bValue) \\\\\\n          : bValue.localeCompare(aValue);\\\\n      }\\\\n\\\\n      if (aValue === bValue) return 0;\\\\n      \\\\n      if (sortDirection === 'asc') {\\\\n        return aValue > bValue ? 1 : -1;\\\\n      } else {\\\\n        return aValue < bValue ? 1 : -1;\\\\n      }\\\\n    });\\\\n  }, [data, sortKey, sortDirection]);\\\\n\\\\n  return { sortedData, sortKey, sortDirection, handleSort };\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// hooks/useFilter.ts\\\\nimport { useMemo } from 'react';\\\\nimport { Column } from '../components/DataTable';\\\\n\\\\nexport function useFilter<T extends Record<string, any>>(\\\\n  data: T[], \\\\\\n  filterValue: string,\\\\n  columns: Column<T>[]\\\\n) {\\\\n  const filteredData = useMemo(() => {\\\\n    if (!filterValue) return data;\\\\n    \\\\n    const lowercasedFilter = filterValue.toLowerCase();\\\\n    \\\\n    return data.filter(item => {\\\\n      return columns.some(column => {\\\\n        const value = item[column.key];\\\\n        if (value == null) return false;\\\\n        \\\\n        return String(value).toLowerCase().includes(lowercasedFilter);\\\\n      });\\\\n    });\\\\n  }, [data, filterValue, columns]);\\\\n\\\\n  return { filteredData };\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// hooks/usePagination.ts\\\\nimport { useState, useMemo, useEffect } from 'react';\\\\n\\\\nexport function usePagination<T>(\\\\n  data: T[], \\\\\\n  initialRowsPerPage: number\\\\n) {\\\\n  const [currentPage, setCurrentPage] = useState(1);\\\\n  const [rowsPerPage, setRowsPerPage] = useState(initialRowsPerPage);\\\\n\\\\n  // Reset to first page when data changes\\\\n  useEffect(() => {\\\\n    setCurrentPage(1);\\\\n  }, [data.length]);\\\\n\\\\n  const totalPages = useMemo(() => \\\\\\n    Math.max(1, Math.ceil(data.length / rowsPerPage)),\\\\n    [data.length, rowsPerPage]\\\\n  );\\\\n\\\\n  // Keep current page in bounds\\\\n  useEffect(() => {\\\\n    if (currentPage > totalPages) {\\\\n      setCurrentPage(totalPages);\\\\n    }\\\\n  }, [currentPage, totalPages]);\\\\n\\\\n  const currentPageData = useMemo(() => {\\\\n    const startIndex = (currentPage - 1) * rowsPerPage;\\\\n    return data.slice(startIndex, startIndex + rowsPerPage);\\\\n  }, [data, currentPage, rowsPerPage]);\\\\n\\\\n  return { \\\\\\n    currentPageData, \\\\\\n    currentPage, \\\\\\n    totalPages, \\\\\\n    rowsPerPage,\\\\n    setCurrentPage, \\\\\\n    setRowsPerPage \\\\n  };\\\\n}\\\\n```\\\\n\\\\n## Supporting Components\\\\n\\\\n```typescript\\\\n// TableHeader.tsx\\\\nimport React from 'react';\\\\nimport styled from 'styled-components';\\\\nimport { Column } from './DataTable';\\\\n\\\\nconst HeaderRow = styled.tr`\\\\n  background-color: #f5f5f5;\\\\n  border-bottom: 2px solid #ddd;\\\\n`;\\\\n\\\\nconst HeaderCell = styled.th<{ sortable: boolean }>`\\\\n  padding: 12px 16px;\\\\n  text-align: left;\\\\n  font-weight: 600;\\\\n  cursor: ${props => props.sortable ? 'pointer' : 'default'};\\\\n  user-select: none;\\\\n  position: relative;\\\\n`;\\\\n\\\\nconst SortIcon = styled.span<{ direction: 'asc' | 'desc' }>`\\\\n  margin-left: 8px;\\\\n  &:after {\\\\n    content: '${props => props.direction === 'asc' ? '↑' : '↓'}';\\\\n    font-size: 14px;\\\\n  }\\\\n`;\\\\n\\\\ninterface TableHeaderProps<T> {\\\\n  columns: Column<T>[];\\\\n  sortKey?: string;\\\\n  sortDirection: 'asc' | 'desc';\\\\n  onSort: (key: string) => void;\\\\n}\\\\n\\\\nexport function TableHeader<T>({ \\\\\\n  columns, \\\\\\n  sortKey, \\\\\\n  sortDirection, \\\\\\n  onSort \\\\n}: TableHeaderProps<T>) {\\\\n  return (\\\\n    <thead>\\\\n      <HeaderRow>\\\\n        {columns.map(column => (\\\\n          <HeaderCell \\\\\\n          key={column.key} \\\\\\n          sortable={!!column.sortable}\\\\\\n          onClick={column.sortable ? () => onSort(column.key) : undefined}\\\\\\n        >\\\\\\n          {column.header}\\\\\\n          {sortKey === column.key && (\\\\n            <SortIcon direction={sortDirection} />\\\\n          )}\\\\\\n        </HeaderCell>\\\\n        ))}\\\\\\n      </HeaderRow>\\\\n    </thead>\\\\n  );\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// TableRow.tsx\\\\nimport React from 'react';\\\\nimport styled from 'styled-components';\\\\nimport { Column } from './DataTable';\\\\n\\\\nconst Row = styled.tr<{ clickable: boolean }>`\\\\n  cursor: ${props => props.clickable ? 'pointer' : 'default'};\\\\n`;\\\\n\\\\nconst Cell = styled.td`\\\\n  padding: 12px 16px;\\\\n  border-bottom: 1px solid #eee;\\\\n  vertical-align: top;\\\\n`;\\\\n\\\\ninterface TableRowProps<T> {\\\\n  item: T;\\\\n  columns: Column<T>[];\\\\n  onClick?: () => void;\\\\n}\\\\n\\\\nexport function TableRow<T>({ item, columns, onClick }: TableRowProps<T>) {\\\\n  return (\\\\n    <Row clickable={!!onClick} onClick={onClick}>\\\\\\n      {columns.map(column => (\\\\n        <Cell key={column.key}>\\\\\\n          {column.renderCell ? column.renderCell(item) : String(item[column.key] ?? '')}\\\\\\n        </Cell>\\\\n      ))}\\\\\\n    </Row>\\\\n  );\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// Pagination.tsx\\\\nimport React from 'react';\\\\nimport styled from 'styled-components';\\\\n\\\\nconst PaginationContainer = styled.div`\\\\n  display: flex;\\\\n  justify-content: space-between;\\\\n  align-items: center;\\\\n  margin-top: 16px;\\\\n  font-size: 14px;\\\\n`;\\\\n\\\\nconst PageInfo = styled.div`\\\\n  color: #666;\\\\n`;\\\\n\\\\nconst PageControls = styled.div`\\\\n  display: flex;\\\\n  align-items: center;\\\\n`;\\\\n\\\\nconst PageButton = styled.button<{ active?: boolean }>`\\\\n  padding: 6px 12px;\\\\n  margin: 0 4px;\\\\n  background-color: ${props => props.active ? '#007bff' : 'white'};\\\\n  color: ${props => props.active ? 'white' : '#333'};\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 4px;\\\\n  cursor: pointer;\\\\n  \\\\n  &:disabled {\\\\n    opacity: 0.5;\\\\n    cursor: not-allowed;\\\\n  }\\\\n  \\\\n  &:hover:not(:disabled) {\\\\n    background-color: ${props => props.active ? '#007bff' : '#f1f1f1'};\\\\n  }\\\\n`;\\\\n\\\\nconst RowsPerPageSelect = styled.select`\\\\n  padding: 6px 8px;\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 4px;\\\\n  margin-left: 8px;\\\\n`;\\\\n\\\\ninterface PaginationProps {\\\\n  currentPage: number;\\\\n  totalPages: number;\\\\n  rowsPerPage: number;\\\\n  rowsPerPageOptions: number[];\\\\n  totalItems: number;\\\\n  onPageChange: (page: number) => void;\\\\n  onRowsPerPageChange: (rowsPerPage: number) => void;\\\\n}\\\\n\\\\nexport function Pagination({ \\\\\\n  currentPage, \\\\\\n  totalPages, \\\\\\n  rowsPerPage, \\\\\\n  rowsPerPageOptions, \\\\\\n  totalItems,\\\\n  onPageChange, \\\\\\n  onRowsPerPageChange \\\\n}: PaginationProps) {\\\\n  // Calculate start and end item numbers\\\\n  const startItem = Math.min(totalItems, (currentPage - 1) * rowsPerPage + 1);\\\\n  const endItem = Math.min(totalItems, startItem + rowsPerPage - 1);\\\\n  \\\\n  // Generate page buttons\\\\n  const getPageButtons = () => {\\\\n    const buttons = [];\\\\n    \\\\n    // Always show first page\\\\n    buttons.push(\\\\n      <PageButton \\\\\\n      key=\\\\\\\"first\\\\\\\" \\\\\\n      active={currentPage === 1}\\\\\\n      onClick={() => onPageChange(1)}\\\\\\n      disabled={currentPage === 1}\\\\\\n    >\\\\\\n      1\\\\\\n    </PageButton>\\\\n    );\\\\n    \\\\n    // Show ellipsis if needed\\\\n    if (currentPage > 3) {\\\\n      buttons.push(<span key=\\\\\\\"ellipsis1\\\\\\\">...</span>);\\\\n    }\\\\n    \\\\n    // Show pages around current page\\\\n    for (let i = Math.max(2, currentPage - 1); i <= Math.min(totalPages - 1, currentPage + 1); i++) {\\\\n      buttons.push(\\\\n        <PageButton \\\\\\n      key={i} \\\\\\n      active={currentPage === i}\\\\\\n      onClick={() => onPageChange(i)}\\\\\\n    >\\\\\\n      {i}\\\\\\n    </PageButton>\\\\n      );\\\\n    }\\\\n    \\\\n    // Show ellipsis if needed\\\\n    if (currentPage < totalPages - 2) {\\\\n      buttons.push(<span key=\\\\\\\"ellipsis2\\\\\\\">...</span>);\\\\n    }\\\\n    \\\\n    // Always show last page if there's more than one page\\\\n    if (totalPages > 1) {\\\\n      buttons.push(\\\\n        <PageButton \\\\\\n      key=\\\\\\\"last\\\\\\\" \\\\\\n      active={currentPage === totalPages}\\\\\\n      onClick={() => onPageChange(totalPages)}\\\\\\n      disabled={currentPage === totalPages}\\\\\\n    >\\\\\\n      {totalPages}\\\\\\n    </PageButton>\\\\n      );\\\\n    }\\\\n    \\\\n    return buttons;\\\\n  };\\\\n\\\\n  return (\\\\n    <PaginationContainer>\\\\n      <PageInfo>\\\\n        Showing {totalItems ? `${startItem}-${endItem} of ${totalItems}` : '0'} results\\\\n      </PageInfo>\\\\n      \\\\n      <PageControls>\\\\n        <PageButton \\\\\\n      onClick={() => onPageChange(currentPage - 1)}\\\\\\n      disabled={currentPage === 1}\\\\\\n    >\\\\\\n      Previous\\\\\\n    </PageButton>\\\\n        \\\\\\n        {getPageButtons()}\\\\\\n        \\\\\\n        <PageButton \\\\\\n          onClick={() => onPageChange(currentPage + 1)}\\\\\\n          disabled={currentPage === totalPages}\\\\\\n        >\\\\\\n          Next\\\\\\n        </PageButton>\\\\n        \\\\\\n        <span style={{ marginLeft: '16px' }}>Rows per page:</span>\\\\\\n        <RowsPerPageSelect \\\\\\n          value={rowsPerPage}\\\\\\n          onChange={(e) => onRowsPerPageChange(Number(e.target.value))}\\\\\\n        >\\\\\\n          {rowsPerPageOptions.map(option => (\\\\n            <option key={option} value={option}>{option}</option>\\\\n          ))}\\\\\\n        </RowsPerPageSelect>\\\\\\n      </PageControls>\\\\\\n    </PaginationContainer>\\\\n  );\\\\n}\\\\n```\\\\n\\\\n## Usage Example\\\\n\\\\n```tsx\\\\nimport React from 'react';\\\\nimport { DataTable } from './components/DataTable';\\\\n\\\\ninterface User {\\\\n  id: number;\\\\n  name: string;\\\\n  email: string;\\\\n  role: string;\\\\n  status: 'active' | 'inactive';\\\\n  lastLogin: string;\\\\n}\\\\n\\\\nconst users: User[] = [\\\\n  { id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin', status: 'active', lastLogin: '2023-05-15T10:30:00Z' },\\\\n  { id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'Editor', status: 'active', lastLogin: '2023-05-14T09:15:00Z' },\\\\n  // Add more users as needed\\\\n];\\\\n\\\\nfunction UserTable() {\\\\n  const columns = [\\\\n    { key: 'id', header: 'ID', sortable: true },\\\\n    { key: 'name', header: 'Name', sortable: true, filterable: true },\\\\n    { key: 'email', header: 'Email', filterable: true },\\\\n    { key: 'role', header: 'Role', sortable: true, filterable: true },\\\\n    { \\\\\\n      key: 'status', \\\\\\n      header: 'Status', \\\\\\n      sortable: true,\\\\\\n      renderCell: (user: User) => (\\\\n        <span style={{ \\\\\\n        color: user.status === 'active' ? 'green' : 'red',\\\\\\n        fontWeight: 'bold'\\\\\\n      }}>\\\\\\n        {user.status}\\\\\\n      </span>\\\\n      )\\\\n    },\\\\n    { \\\\\\n      key: 'lastLogin', \\\\\\n      header: 'Last Login', \\\\\\n      sortable: true,\\\\\\n      renderCell: (user: User) => new Date(user.lastLogin).toLocaleString()\\\\n    },\\\\n  ];\\\\n\\\\n  const handleRowClick = (user: User) => {\\\\n    console.log('User clicked:', user);\\\\n    // Navigate to user detail page or show modal\\\\n  };\\\\n\\\\n  return (\\\\n    <div>\\\\n      <h1>User Management</h1>\\\\n      <DataTable \\\\\\n        data={users}\\\\\\n        columns={columns}\\\\\\n        initialSortKey=\\\\\\\"id\\\\\\\"\\\\\\n        initialRowsPerPage={10}\\\\\\n        rowsPerPageOptions={[5, 10, 25, 50]}\\\\\\n        onRowClick={handleRowClick}\\\\\\n      />\\\\n    </div>\\\\n  );\\\\n}\\\\n\\\\nexport default UserTable;\\\\n```\\\\n\\\\n## Installation Instructions\\\\n\\\\nTo use this component, you'll need to have these dependencies installed:\\\\n\\\\n```bash\\\\nnpm install styled-components @types/styled-components\\\\n```\\\\n\\\\nor\\\\n\\\\n```bash\\\\nyarn add styled-components @types/styled-components\\\\n```\\\\n\\\\n## MCP Resources Used\\\\n\\\\n- `@file:///project/src/components/` - Examined your existing component structure to match the styling approach and component patterns\\\\n- `@memory://coding-preferences` - Retrieved your preference for functional components, React 18, and TypeScript\\\\n\\\\nThe component follows modern React best practices with proper TypeScript typing, modular structure, and optimized performance through memoization. The styled-components implementation ensures consistent styling that can be customized to match your application's design system.\\\"\\n    }\\n  ],\\n  \\\"metadata\\\": {\\n    \\\"created_at\\\": \\\"2023-05-15T12:00:00Z\\\",\\n    \\\"updated_at\\\": \\\"2023-05-15T12:00:00Z\\\",\\n    \\\"author\\\": \\\"MCP-Prompts Team\\\",\\n    \\\"category\\\": \\\"development\\\",\\n    \\\"mcp_requirements\\\": [\\n      \\\"MCP Filesystem Server\\\",\\n      \\\"MCP GitHub Server\\\",\\n      \\\"MCP Sequential Thinking Server\\\",\\n      \\\"MCP Memory Server"
}
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/prompts/mcp-code-generator.json:
--------------------------------------------------------------------------------

```json
{
  "name": "mcp-code-generator",
  "description": "An advanced code generation prompt that leverages multiple MCP resources to create contextually-aware, high-quality code with minimal hallucination.",
  "type": "prompt",
  "category": "other",
  "content": " \\\"mcp-code-generator\\\",\\n  \\\"version\\\": \\\"1.0.0\\\",\\n  \\\"description\\\": \\\"An advanced code generation prompt that leverages multiple MCP resources to create contextually-aware, high-quality code with minimal hallucination.\\\",\\n  \\\"prompt_text\\\": \\\"# MCP-Powered Code Generator\\\\n\\\\nYou are an expert coding assistant with access to multiple MCP resources. Your task is to generate high-quality, contextually-appropriate code based on the user's requirements while leveraging the following MCP resources to reduce hallucination and improve accuracy:\\\\n\\\\n- **Filesystem** (@file:// URIs): Access to project files and directory structure\\\\n- **GitHub** (@github:// URIs): Access to repositories, code examples, and documentation\\\\n- **Sequential Thinking** (@thinking:// URIs): Step-by-step reasoning for complex algorithms\\\\n- **Memory** (@memory:// URIs): Previous code snippets and user preferences\\\\n\\\\n## Code Generation Process\\\\n\\\\n1. **Analyze Requirements**\\\\n   - Break down the user's request into specific coding tasks\\\\n   - Identify key functionalities, interfaces, and constraints\\\\n   - Determine appropriate language, framework, or library to use\\\\n\\\\n2. **Resource Collection**\\\\n   - Check current project structure (if available): `@file:///project`\\\\n   - Find related examples on GitHub: `@github://relevant-repos`\\\\n   - Retrieve user preferences if available: `@memory://coding-preferences`\\\\n\\\\n3. **Design Phase**\\\\n   - Create a high-level design outline\\\\n   - Determine classes, functions, or components needed\\\\n   - Establish interfaces and relationships\\\\n\\\\n4. **Implementation Phase**\\\\n   - Write clean, well-documented code that follows best practices\\\\n   - Include proper error handling and edge cases\\\\n   - Ensure compatibility with existing codebase (if applicable)\\\\n   - Add appropriate comments and documentation\\\\n\\\\n5. **Testing Considerations**\\\\n   - Include unit test examples or strategies when appropriate\\\\n   - Consider edge cases and potential failures\\\\n   - Provide sample usage examples\\\\n\\\\n## Code Quality Guidelines\\\\n\\\\n- **Readability**: Write clear, self-explanatory code with consistent formatting\\\\n- **Maintainability**: Use descriptive variable names and follow language conventions\\\\n- **Performance**: Consider algorithmic efficiency and resource usage\\\\n- **Security**: Follow security best practices and avoid common vulnerabilities\\\\n- **Reusability**: Create modular, reusable components when appropriate\\\\n\\\\n## Output Format\\\\n\\\\nYour response should include:\\\\n\\\\n1. A brief explanation of the approach taken\\\\n2. The generated code in properly formatted code blocks\\\\n3. Installation instructions or dependencies (if applicable)\\\\n4. Usage examples\\\\n5. References to any MCP resources used\\\\n\\\\n## Contextual Adaptation\\\\n\\\\nTailor your code generation based on:\\\\n\\\\n- The programming language specified or inferred from context\\\\n- The user's preferred coding style (if known)\\\\n- The complexity level appropriate for the task\\\\n- The target environment (web, mobile, desktop, server, etc.)\\\\n\\\\n{{code_requirements}}\\\\n\\\\n{{additional_context}}\\\",\\n  \\\"variables\\\": [\\n    \\\"code_requirements\\\",\\n    \\\"additional_context\\\"\\n  ],\\n  \\\"tags\\\": [\\n    \\\"code-generation\\\",\\n    \\\"multi-resource\\\",\\n    \\\"mcp-integration\\\",\\n    \\\"development\\\",\\n    \\\"programming\\\"\\n  ],\\n  \\\"examples\\\": [\\n    {\\n      \\\"name\\\": \\\"React Component Generator\\\",\\n      \\\"variables\\\": {\\n        \\\"code_requirements\\\": \\\"Create a React component for a customizable data table with sorting, filtering, and pagination capabilities. The component should be reusable across our application.\\\",\\n        \\\"additional_context\\\": \\\"Our project uses TypeScript, React 18, and follows a functional component approach with hooks. We prefer using styled-components for styling. The existing component structure can be found at @file:///project/src/components/.\\\"\\n      },\\n      \\\"expected_response\\\": \\\"# Customizable Data Table Component\\\\n\\\\nI'll create a reusable React component for a data table with sorting, filtering, and pagination capabilities, following your project's TypeScript and React 18 standards with styled-components for styling.\\\\n\\\\n## Approach\\\\n\\\\nAfter examining your project structure at `@file:///project/src/components/`, I notice you're using a functional component pattern with hooks. I'll create:\\\\n\\\\n1. A main `DataTable` component that handles the core functionality\\\\n2. Several sub-components for table elements (header, row, cell, pagination)\\\\n3. Custom hooks for sorting, filtering, and pagination logic\\\\n4. TypeScript interfaces for strong typing\\\\n\\\\n## Component Structure\\\\n\\\\n```typescript\\\\n// DataTable.tsx\\\\nimport React, { useState, useMemo, useCallback } from 'react';\\\\nimport styled from 'styled-components';\\\\nimport { TableHeader } from './TableHeader';\\\\nimport { TableRow } from './TableRow';\\\\nimport { Pagination } from './Pagination';\\\\nimport { useSort } from '../hooks/useSort';\\\\nimport { useFilter } from '../hooks/useFilter';\\\\nimport { usePagination } from '../hooks/usePagination';\\\\n\\\\n// TypeScript interfaces\\\\nexport interface Column<T> {\\\\n  key: string;\\\\n  header: string;\\\\n  renderCell?: (item: T) => React.ReactNode;\\\\n  sortable?: boolean;\\\\n  filterable?: boolean;\\\\n}\\\\n\\\\nexport interface DataTableProps<T> {\\\\n  data: T[];\\\\n  columns: Column<T>[];\\\\n  initialSortKey?: string;\\\\n  initialSortDirection?: 'asc' | 'desc';\\\\n  rowsPerPageOptions?: number[];\\\\n  initialRowsPerPage?: number;\\\\n  onRowClick?: (item: T) => void;\\\\n  className?: string;\\\\n}\\\\n\\\\n// Styled components\\\\nconst TableContainer = styled.div`\\\\n  width: 100%;\\\\n  overflow-x: auto;\\\\n  border-radius: 4px;\\\\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\\\\n`;\\\\n\\\\nconst Table = styled.table`\\\\n  width: 100%;\\\\n  border-collapse: collapse;\\\\n  font-size: 14px;\\\\n`;\\\\n\\\\nconst TableBody = styled.tbody`\\\\n  & tr:nth-child(odd) {\\\\n    background-color: #f9f9f9;\\\\n  }\\\\n  \\\\n  & tr:hover {\\\\n    background-color: #f1f1f1;\\\\n  }\\\\n`;\\\\n\\\\nconst FilterContainer = styled.div`\\\\n  margin-bottom: 16px;\\\\n  display: flex;\\\\n  justify-content: flex-end;\\\\n`;\\\\n\\\\nconst FilterInput = styled.input`\\\\n  padding: 8px 12px;\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 4px;\\\\n  font-size: 14px;\\\\n  width: 250px;\\\\n`;\\\\n\\\\n// Main component\\\\nexport function DataTable<T extends Record<string, any>>({ \\\\n  data, \\\\n  columns, \\\\n  initialSortKey,\\\\n  initialSortDirection = 'asc',\\\\n  rowsPerPageOptions = [10, 25, 50],\\\\n  initialRowsPerPage = 10,\\\\n  onRowClick,\\\\n  className\\\\n}: DataTableProps<T>) {\\\\n  // Global filter state\\\\n  const [filterValue, setFilterValue] = useState('');\\\\n  \\\\n  // Hook usage\\\\n  const { sortedData, sortKey, sortDirection, handleSort } = useSort(data, initialSortKey, initialSortDirection);\\\\n  const { filteredData } = useFilter(sortedData, filterValue, columns);\\\\n  const { \\\\n    currentPageData, \\\\n    currentPage, \\\\n    totalPages, \\\\n    rowsPerPage,\\\\n    setCurrentPage, \\\\n    setRowsPerPage \\\\n  } = usePagination(filteredData, initialRowsPerPage);\\\\n\\\\n  // Filter change handler\\\\n  const handleFilterChange = useCallback(\\\\n    (e: React.ChangeEvent<HTMLInputElement>) => {\\\\n      setFilterValue(e.target.value);\\\\n      setCurrentPage(1); // Reset to first page when filtering\\\\n    }, \\\\n    [setCurrentPage]\\\\n  );\\\\n\\\\n  // Memoize filterable columns\\\\n  const filterableColumns = useMemo(\\\\n    () => columns.filter(column => column.filterable),\\\\n    [columns]\\\\n  );\\\\n\\\\n  return (\\\\n    <div className={className}>\\\\n      {filterableColumns.length > 0 && (\\\\n        <FilterContainer>\\\\n          <FilterInput \\\\\\n            type=\\\\\\\"text\\\\\\\" \\\\\\n            placeholder=\\\\\\\"Filter table...\\\\\\\"\\\\\\n            value={filterValue}\\\\\\n            onChange={handleFilterChange}\\\\\\n          />\\\\\\n        </FilterContainer>\\\\\\n      )}\\\\\\n      \\\\\\n      <TableContainer>\\\\\\n        <Table>\\\\\\n          <TableHeader \\\\\\n            columns={columns} \\\\\\n            sortKey={sortKey} \\\\\\n            sortDirection={sortDirection} \\\\\\n            onSort={handleSort} \\\\\\n          />\\\\\\n          <TableBody>\\\\\\n            {currentPageData.map((item, index) => (\\\\\\n              <TableRow \\\\\\n                key={index} \\\\\\n                item={item} \\\\\\n                columns={columns} \\\\\\n                onClick={onRowClick ? () => onRowClick(item) : undefined} \\\\\\n              />\\\\\\n            ))}\\\\\\n            {currentPageData.length === 0 && (\\\\\\n              <tr>\\\\\\n                <td colSpan={columns.length} style={{ textAlign: 'center', padding: '16px' }}>\\\\\\n                  No records found\\\\\\n                </td>\\\\\\n              </tr>\\\\\\n            )}\\\\\\n          </TableBody>\\\\\\n        </Table>\\\\\\n      </TableContainer>\\\\\\n      \\\\\\n      <Pagination \\\\\\n        currentPage={currentPage}\\\\\\n        totalPages={totalPages}\\\\\\n        rowsPerPage={rowsPerPage}\\\\\\n        rowsPerPageOptions={rowsPerPageOptions}\\\\\\n        onPageChange={setCurrentPage}\\\\\\n        onRowsPerPageChange={setRowsPerPage}\\\\\\n        totalItems={filteredData.length}\\\\\\n      />\\\\\\n    </div>\\\\\\n  );\\\\\\n}\\\\n```\\\\n\\\\n## Custom Hooks Implementation\\\\n\\\\n```typescript\\\\n// hooks/useSort.ts\\\\nimport { useState, useMemo } from 'react';\\\\n\\\\nexport function useSort<T extends Record<string, any>>(\\\\n  data: T[], \\\\\\n  initialSortKey?: string, \\\\\\n  initialSortDirection: 'asc' | 'desc' = 'asc'\\\\n) {\\\\n  const [sortKey, setSortKey] = useState<string | undefined>(initialSortKey);\\\\n  const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>(initialSortDirection);\\\\n\\\\n  const handleSort = (key: string) => {\\\\n    if (sortKey === key) {\\\\n      // Toggle direction if already sorting by this key\\\\n      setSortDirection(prev => prev === 'asc' ? 'desc' : 'asc');\\\\n    } else {\\\\n      // New sort key, set to ascending by default\\\\n      setSortKey(key);\\\\n      setSortDirection('asc');\\\\n    }\\\\n  };\\\\n\\\\n  const sortedData = useMemo(() => {\\\\n    if (!sortKey) return [...data];\\\\n\\\\n    return [...data].sort((a, b) => {\\\\n      const aValue = a[sortKey];\\\\n      const bValue = b[sortKey];\\\\n\\\\n      // Handle different data types\\\\n      if (typeof aValue === 'string' && typeof bValue === 'string') {\\\\n        return sortDirection === 'asc' \\\\\\n          ? aValue.localeCompare(bValue) \\\\\\n          : bValue.localeCompare(aValue);\\\\n      }\\\\n\\\\n      if (aValue === bValue) return 0;\\\\n      \\\\n      if (sortDirection === 'asc') {\\\\n        return aValue > bValue ? 1 : -1;\\\\n      } else {\\\\n        return aValue < bValue ? 1 : -1;\\\\n      }\\\\n    });\\\\n  }, [data, sortKey, sortDirection]);\\\\n\\\\n  return { sortedData, sortKey, sortDirection, handleSort };\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// hooks/useFilter.ts\\\\nimport { useMemo } from 'react';\\\\nimport { Column } from '../components/DataTable';\\\\n\\\\nexport function useFilter<T extends Record<string, any>>(\\\\n  data: T[], \\\\\\n  filterValue: string,\\\\n  columns: Column<T>[]\\\\n) {\\\\n  const filteredData = useMemo(() => {\\\\n    if (!filterValue) return data;\\\\n    \\\\n    const lowercasedFilter = filterValue.toLowerCase();\\\\n    \\\\n    return data.filter(item => {\\\\n      return columns.some(column => {\\\\n        const value = item[column.key];\\\\n        if (value == null) return false;\\\\n        \\\\n        return String(value).toLowerCase().includes(lowercasedFilter);\\\\n      });\\\\n    });\\\\n  }, [data, filterValue, columns]);\\\\n\\\\n  return { filteredData };\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// hooks/usePagination.ts\\\\nimport { useState, useMemo, useEffect } from 'react';\\\\n\\\\nexport function usePagination<T>(\\\\n  data: T[], \\\\\\n  initialRowsPerPage: number\\\\n) {\\\\n  const [currentPage, setCurrentPage] = useState(1);\\\\n  const [rowsPerPage, setRowsPerPage] = useState(initialRowsPerPage);\\\\n\\\\n  // Reset to first page when data changes\\\\n  useEffect(() => {\\\\n    setCurrentPage(1);\\\\n  }, [data.length]);\\\\n\\\\n  const totalPages = useMemo(() => \\\\\\n    Math.max(1, Math.ceil(data.length / rowsPerPage)),\\\\n    [data.length, rowsPerPage]\\\\n  );\\\\n\\\\n  // Keep current page in bounds\\\\n  useEffect(() => {\\\\n    if (currentPage > totalPages) {\\\\n      setCurrentPage(totalPages);\\\\n    }\\\\n  }, [currentPage, totalPages]);\\\\n\\\\n  const currentPageData = useMemo(() => {\\\\n    const startIndex = (currentPage - 1) * rowsPerPage;\\\\n    return data.slice(startIndex, startIndex + rowsPerPage);\\\\n  }, [data, currentPage, rowsPerPage]);\\\\n\\\\n  return { \\\\\\n    currentPageData, \\\\\\n    currentPage, \\\\\\n    totalPages, \\\\\\n    rowsPerPage,\\\\n    setCurrentPage, \\\\\\n    setRowsPerPage \\\\n  };\\\\n}\\\\n```\\\\n\\\\n## Supporting Components\\\\n\\\\n```typescript\\\\n// TableHeader.tsx\\\\nimport React from 'react';\\\\nimport styled from 'styled-components';\\\\nimport { Column } from './DataTable';\\\\n\\\\nconst HeaderRow = styled.tr`\\\\n  background-color: #f5f5f5;\\\\n  border-bottom: 2px solid #ddd;\\\\n`;\\\\n\\\\nconst HeaderCell = styled.th<{ sortable: boolean }>`\\\\n  padding: 12px 16px;\\\\n  text-align: left;\\\\n  font-weight: 600;\\\\n  cursor: ${props => props.sortable ? 'pointer' : 'default'};\\\\n  user-select: none;\\\\n  position: relative;\\\\n`;\\\\n\\\\nconst SortIcon = styled.span<{ direction: 'asc' | 'desc' }>`\\\\n  margin-left: 8px;\\\\n  &:after {\\\\n    content: '${props => props.direction === 'asc' ? '\u2191' : '\u2193'}';\\\\n    font-size: 14px;\\\\n  }\\\\n`;\\\\n\\\\ninterface TableHeaderProps<T> {\\\\n  columns: Column<T>[];\\\\n  sortKey?: string;\\\\n  sortDirection: 'asc' | 'desc';\\\\n  onSort: (key: string) => void;\\\\n}\\\\n\\\\nexport function TableHeader<T>({ \\\\\\n  columns, \\\\\\n  sortKey, \\\\\\n  sortDirection, \\\\\\n  onSort \\\\n}: TableHeaderProps<T>) {\\\\n  return (\\\\n    <thead>\\\\n      <HeaderRow>\\\\n        {columns.map(column => (\\\\n          <HeaderCell \\\\\\n          key={column.key} \\\\\\n          sortable={!!column.sortable}\\\\\\n          onClick={column.sortable ? () => onSort(column.key) : undefined}\\\\\\n        >\\\\\\n          {column.header}\\\\\\n          {sortKey === column.key && (\\\\n            <SortIcon direction={sortDirection} />\\\\n          )}\\\\\\n        </HeaderCell>\\\\n        ))}\\\\\\n      </HeaderRow>\\\\n    </thead>\\\\n  );\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// TableRow.tsx\\\\nimport React from 'react';\\\\nimport styled from 'styled-components';\\\\nimport { Column } from './DataTable';\\\\n\\\\nconst Row = styled.tr<{ clickable: boolean }>`\\\\n  cursor: ${props => props.clickable ? 'pointer' : 'default'};\\\\n`;\\\\n\\\\nconst Cell = styled.td`\\\\n  padding: 12px 16px;\\\\n  border-bottom: 1px solid #eee;\\\\n  vertical-align: top;\\\\n`;\\\\n\\\\ninterface TableRowProps<T> {\\\\n  item: T;\\\\n  columns: Column<T>[];\\\\n  onClick?: () => void;\\\\n}\\\\n\\\\nexport function TableRow<T>({ item, columns, onClick }: TableRowProps<T>) {\\\\n  return (\\\\n    <Row clickable={!!onClick} onClick={onClick}>\\\\\\n      {columns.map(column => (\\\\n        <Cell key={column.key}>\\\\\\n          {column.renderCell ? column.renderCell(item) : String(item[column.key] ?? '')}\\\\\\n        </Cell>\\\\n      ))}\\\\\\n    </Row>\\\\n  );\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// Pagination.tsx\\\\nimport React from 'react';\\\\nimport styled from 'styled-components';\\\\n\\\\nconst PaginationContainer = styled.div`\\\\n  display: flex;\\\\n  justify-content: space-between;\\\\n  align-items: center;\\\\n  margin-top: 16px;\\\\n  font-size: 14px;\\\\n`;\\\\n\\\\nconst PageInfo = styled.div`\\\\n  color: #666;\\\\n`;\\\\n\\\\nconst PageControls = styled.div`\\\\n  display: flex;\\\\n  align-items: center;\\\\n`;\\\\n\\\\nconst PageButton = styled.button<{ active?: boolean }>`\\\\n  padding: 6px 12px;\\\\n  margin: 0 4px;\\\\n  background-color: ${props => props.active ? '#007bff' : 'white'};\\\\n  color: ${props => props.active ? 'white' : '#333'};\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 4px;\\\\n  cursor: pointer;\\\\n  \\\\n  &:disabled {\\\\n    opacity: 0.5;\\\\n    cursor: not-allowed;\\\\n  }\\\\n  \\\\n  &:hover:not(:disabled) {\\\\n    background-color: ${props => props.active ? '#007bff' : '#f1f1f1'};\\\\n  }\\\\n`;\\\\n\\\\nconst RowsPerPageSelect = styled.select`\\\\n  padding: 6px 8px;\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 4px;\\\\n  margin-left: 8px;\\\\n`;\\\\n\\\\ninterface PaginationProps {\\\\n  currentPage: number;\\\\n  totalPages: number;\\\\n  rowsPerPage: number;\\\\n  rowsPerPageOptions: number[];\\\\n  totalItems: number;\\\\n  onPageChange: (page: number) => void;\\\\n  onRowsPerPageChange: (rowsPerPage: number) => void;\\\\n}\\\\n\\\\nexport function Pagination({ \\\\\\n  currentPage, \\\\\\n  totalPages, \\\\\\n  rowsPerPage, \\\\\\n  rowsPerPageOptions, \\\\\\n  totalItems,\\\\n  onPageChange, \\\\\\n  onRowsPerPageChange \\\\n}: PaginationProps) {\\\\n  // Calculate start and end item numbers\\\\n  const startItem = Math.min(totalItems, (currentPage - 1) * rowsPerPage + 1);\\\\n  const endItem = Math.min(totalItems, startItem + rowsPerPage - 1);\\\\n  \\\\n  // Generate page buttons\\\\n  const getPageButtons = () => {\\\\n    const buttons = [];\\\\n    \\\\n    // Always show first page\\\\n    buttons.push(\\\\n      <PageButton \\\\\\n      key=\\\\\\\"first\\\\\\\" \\\\\\n      active={currentPage === 1}\\\\\\n      onClick={() => onPageChange(1)}\\\\\\n      disabled={currentPage === 1}\\\\\\n    >\\\\\\n      1\\\\\\n    </PageButton>\\\\n    );\\\\n    \\\\n    // Show ellipsis if needed\\\\n    if (currentPage > 3) {\\\\n      buttons.push(<span key=\\\\\\\"ellipsis1\\\\\\\">...</span>);\\\\n    }\\\\n    \\\\n    // Show pages around current page\\\\n    for (let i = Math.max(2, currentPage - 1); i <= Math.min(totalPages - 1, currentPage + 1); i++) {\\\\n      buttons.push(\\\\n        <PageButton \\\\\\n      key={i} \\\\\\n      active={currentPage === i}\\\\\\n      onClick={() => onPageChange(i)}\\\\\\n    >\\\\\\n      {i}\\\\\\n    </PageButton>\\\\n      );\\\\n    }\\\\n    \\\\n    // Show ellipsis if needed\\\\n    if (currentPage < totalPages - 2) {\\\\n      buttons.push(<span key=\\\\\\\"ellipsis2\\\\\\\">...</span>);\\\\n    }\\\\n    \\\\n    // Always show last page if there's more than one page\\\\n    if (totalPages > 1) {\\\\n      buttons.push(\\\\n        <PageButton \\\\\\n      key=\\\\\\\"last\\\\\\\" \\\\\\n      active={currentPage === totalPages}\\\\\\n      onClick={() => onPageChange(totalPages)}\\\\\\n      disabled={currentPage === totalPages}\\\\\\n    >\\\\\\n      {totalPages}\\\\\\n    </PageButton>\\\\n      );\\\\n    }\\\\n    \\\\n    return buttons;\\\\n  };\\\\n\\\\n  return (\\\\n    <PaginationContainer>\\\\n      <PageInfo>\\\\n        Showing {totalItems ? `${startItem}-${endItem} of ${totalItems}` : '0'} results\\\\n      </PageInfo>\\\\n      \\\\n      <PageControls>\\\\n        <PageButton \\\\\\n      onClick={() => onPageChange(currentPage - 1)}\\\\\\n      disabled={currentPage === 1}\\\\\\n    >\\\\\\n      Previous\\\\\\n    </PageButton>\\\\n        \\\\\\n        {getPageButtons()}\\\\\\n        \\\\\\n        <PageButton \\\\\\n          onClick={() => onPageChange(currentPage + 1)}\\\\\\n          disabled={currentPage === totalPages}\\\\\\n        >\\\\\\n          Next\\\\\\n        </PageButton>\\\\n        \\\\\\n        <span style={{ marginLeft: '16px' }}>Rows per page:</span>\\\\\\n        <RowsPerPageSelect \\\\\\n          value={rowsPerPage}\\\\\\n          onChange={(e) => onRowsPerPageChange(Number(e.target.value))}\\\\\\n        >\\\\\\n          {rowsPerPageOptions.map(option => (\\\\n            <option key={option} value={option}>{option}</option>\\\\n          ))}\\\\\\n        </RowsPerPageSelect>\\\\\\n      </PageControls>\\\\\\n    </PaginationContainer>\\\\n  );\\\\n}\\\\n```\\\\n\\\\n## Usage Example\\\\n\\\\n```tsx\\\\nimport React from 'react';\\\\nimport { DataTable } from './components/DataTable';\\\\n\\\\ninterface User {\\\\n  id: number;\\\\n  name: string;\\\\n  email: string;\\\\n  role: string;\\\\n  status: 'active' | 'inactive';\\\\n  lastLogin: string;\\\\n}\\\\n\\\\nconst users: User[] = [\\\\n  { id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin', status: 'active', lastLogin: '2023-05-15T10:30:00Z' },\\\\n  { id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'Editor', status: 'active', lastLogin: '2023-05-14T09:15:00Z' },\\\\n  // Add more users as needed\\\\n];\\\\n\\\\nfunction UserTable() {\\\\n  const columns = [\\\\n    { key: 'id', header: 'ID', sortable: true },\\\\n    { key: 'name', header: 'Name', sortable: true, filterable: true },\\\\n    { key: 'email', header: 'Email', filterable: true },\\\\n    { key: 'role', header: 'Role', sortable: true, filterable: true },\\\\n    { \\\\\\n      key: 'status', \\\\\\n      header: 'Status', \\\\\\n      sortable: true,\\\\\\n      renderCell: (user: User) => (\\\\n        <span style={{ \\\\\\n        color: user.status === 'active' ? 'green' : 'red',\\\\\\n        fontWeight: 'bold'\\\\\\n      }}>\\\\\\n        {user.status}\\\\\\n      </span>\\\\n      )\\\\n    },\\\\n    { \\\\\\n      key: 'lastLogin', \\\\\\n      header: 'Last Login', \\\\\\n      sortable: true,\\\\\\n      renderCell: (user: User) => new Date(user.lastLogin).toLocaleString()\\\\n    },\\\\n  ];\\\\n\\\\n  const handleRowClick = (user: User) => {\\\\n    console.log('User clicked:', user);\\\\n    // Navigate to user detail page or show modal\\\\n  };\\\\n\\\\n  return (\\\\n    <div>\\\\n      <h1>User Management</h1>\\\\n      <DataTable \\\\\\n        data={users}\\\\\\n        columns={columns}\\\\\\n        initialSortKey=\\\\\\\"id\\\\\\\"\\\\\\n        initialRowsPerPage={10}\\\\\\n        rowsPerPageOptions={[5, 10, 25, 50]}\\\\\\n        onRowClick={handleRowClick}\\\\\\n      />\\\\n    </div>\\\\n  );\\\\n}\\\\n\\\\nexport default UserTable;\\\\n```\\\\n\\\\n## Installation Instructions\\\\n\\\\nTo use this component, you'll need to have these dependencies installed:\\\\n\\\\n```bash\\\\nnpm install styled-components @types/styled-components\\\\n```\\\\n\\\\nor\\\\n\\\\n```bash\\\\nyarn add styled-components @types/styled-components\\\\n```\\\\n\\\\n## MCP Resources Used\\\\n\\\\n- `@file:///project/src/components/` - Examined your existing component structure to match the styling approach and component patterns\\\\n- `@memory://coding-preferences` - Retrieved your preference for functional components, React 18, and TypeScript\\\\n\\\\nThe component follows modern React best practices with proper TypeScript typing, modular structure, and optimized performance through memoization. The styled-components implementation ensures consistent styling that can be customized to match your application's design system.\\\"\\n    }\\n  ],\\n  \\\"metadata\\\": {\\n    \\\"created_at\\\": \\\"2023-05-15T12:00:00Z\\\",\\n    \\\"updated_at\\\": \\\"2023-05-15T12:00:00Z\\\",\\n    \\\"author\\\": \\\"MCP-Prompts Team\\\",\\n    \\\"category\\\": \\\"development\\\",\\n    \\\"mcp_requirements\\\": [\\n      \\\"MCP Filesystem Server\\\",\\n      \\\"MCP GitHub Server\\\",\\n      \\\"MCP Sequential Thinking Server\\\",\\n      \\\"MCP Memory Server",
  "variables": {},
  "metadata": {
    "source": "/home/sparrow/projects/mcp-prompts/prompts/mcp-code-generator.json",
    "imported": true
  }
}
```

--------------------------------------------------------------------------------
/src/mcp_project_orchestrator/prompts/other/mcp-code-generator.json:
--------------------------------------------------------------------------------

```json
{
  "name": "mcp-code-generator",
  "description": "An advanced code generation prompt that leverages multiple MCP resources to create contextually-aware, high-quality code with minimal hallucination.",
  "type": "prompt",
  "category": "other",
  "content": " \\\"mcp-code-generator\\\",\\n  \\\"version\\\": \\\"1.0.0\\\",\\n  \\\"description\\\": \\\"An advanced code generation prompt that leverages multiple MCP resources to create contextually-aware, high-quality code with minimal hallucination.\\\",\\n  \\\"prompt_text\\\": \\\"# MCP-Powered Code Generator\\\\n\\\\nYou are an expert coding assistant with access to multiple MCP resources. Your task is to generate high-quality, contextually-appropriate code based on the user's requirements while leveraging the following MCP resources to reduce hallucination and improve accuracy:\\\\n\\\\n- **Filesystem** (@file:// URIs): Access to project files and directory structure\\\\n- **GitHub** (@github:// URIs): Access to repositories, code examples, and documentation\\\\n- **Sequential Thinking** (@thinking:// URIs): Step-by-step reasoning for complex algorithms\\\\n- **Memory** (@memory:// URIs): Previous code snippets and user preferences\\\\n\\\\n## Code Generation Process\\\\n\\\\n1. **Analyze Requirements**\\\\n   - Break down the user's request into specific coding tasks\\\\n   - Identify key functionalities, interfaces, and constraints\\\\n   - Determine appropriate language, framework, or library to use\\\\n\\\\n2. **Resource Collection**\\\\n   - Check current project structure (if available): `@file:///project`\\\\n   - Find related examples on GitHub: `@github://relevant-repos`\\\\n   - Retrieve user preferences if available: `@memory://coding-preferences`\\\\n\\\\n3. **Design Phase**\\\\n   - Create a high-level design outline\\\\n   - Determine classes, functions, or components needed\\\\n   - Establish interfaces and relationships\\\\n\\\\n4. **Implementation Phase**\\\\n   - Write clean, well-documented code that follows best practices\\\\n   - Include proper error handling and edge cases\\\\n   - Ensure compatibility with existing codebase (if applicable)\\\\n   - Add appropriate comments and documentation\\\\n\\\\n5. **Testing Considerations**\\\\n   - Include unit test examples or strategies when appropriate\\\\n   - Consider edge cases and potential failures\\\\n   - Provide sample usage examples\\\\n\\\\n## Code Quality Guidelines\\\\n\\\\n- **Readability**: Write clear, self-explanatory code with consistent formatting\\\\n- **Maintainability**: Use descriptive variable names and follow language conventions\\\\n- **Performance**: Consider algorithmic efficiency and resource usage\\\\n- **Security**: Follow security best practices and avoid common vulnerabilities\\\\n- **Reusability**: Create modular, reusable components when appropriate\\\\n\\\\n## Output Format\\\\n\\\\nYour response should include:\\\\n\\\\n1. A brief explanation of the approach taken\\\\n2. The generated code in properly formatted code blocks\\\\n3. Installation instructions or dependencies (if applicable)\\\\n4. Usage examples\\\\n5. References to any MCP resources used\\\\n\\\\n## Contextual Adaptation\\\\n\\\\nTailor your code generation based on:\\\\n\\\\n- The programming language specified or inferred from context\\\\n- The user's preferred coding style (if known)\\\\n- The complexity level appropriate for the task\\\\n- The target environment (web, mobile, desktop, server, etc.)\\\\n\\\\n{{code_requirements}}\\\\n\\\\n{{additional_context}}\\\",\\n  \\\"variables\\\": [\\n    \\\"code_requirements\\\",\\n    \\\"additional_context\\\"\\n  ],\\n  \\\"tags\\\": [\\n    \\\"code-generation\\\",\\n    \\\"multi-resource\\\",\\n    \\\"mcp-integration\\\",\\n    \\\"development\\\",\\n    \\\"programming\\\"\\n  ],\\n  \\\"examples\\\": [\\n    {\\n      \\\"name\\\": \\\"React Component Generator\\\",\\n      \\\"variables\\\": {\\n        \\\"code_requirements\\\": \\\"Create a React component for a customizable data table with sorting, filtering, and pagination capabilities. The component should be reusable across our application.\\\",\\n        \\\"additional_context\\\": \\\"Our project uses TypeScript, React 18, and follows a functional component approach with hooks. We prefer using styled-components for styling. The existing component structure can be found at @file:///project/src/components/.\\\"\\n      },\\n      \\\"expected_response\\\": \\\"# Customizable Data Table Component\\\\n\\\\nI'll create a reusable React component for a data table with sorting, filtering, and pagination capabilities, following your project's TypeScript and React 18 standards with styled-components for styling.\\\\n\\\\n## Approach\\\\n\\\\nAfter examining your project structure at `@file:///project/src/components/`, I notice you're using a functional component pattern with hooks. I'll create:\\\\n\\\\n1. A main `DataTable` component that handles the core functionality\\\\n2. Several sub-components for table elements (header, row, cell, pagination)\\\\n3. Custom hooks for sorting, filtering, and pagination logic\\\\n4. TypeScript interfaces for strong typing\\\\n\\\\n## Component Structure\\\\n\\\\n```typescript\\\\n// DataTable.tsx\\\\nimport React, { useState, useMemo, useCallback } from 'react';\\\\nimport styled from 'styled-components';\\\\nimport { TableHeader } from './TableHeader';\\\\nimport { TableRow } from './TableRow';\\\\nimport { Pagination } from './Pagination';\\\\nimport { useSort } from '../hooks/useSort';\\\\nimport { useFilter } from '../hooks/useFilter';\\\\nimport { usePagination } from '../hooks/usePagination';\\\\n\\\\n// TypeScript interfaces\\\\nexport interface Column<T> {\\\\n  key: string;\\\\n  header: string;\\\\n  renderCell?: (item: T) => React.ReactNode;\\\\n  sortable?: boolean;\\\\n  filterable?: boolean;\\\\n}\\\\n\\\\nexport interface DataTableProps<T> {\\\\n  data: T[];\\\\n  columns: Column<T>[];\\\\n  initialSortKey?: string;\\\\n  initialSortDirection?: 'asc' | 'desc';\\\\n  rowsPerPageOptions?: number[];\\\\n  initialRowsPerPage?: number;\\\\n  onRowClick?: (item: T) => void;\\\\n  className?: string;\\\\n}\\\\n\\\\n// Styled components\\\\nconst TableContainer = styled.div`\\\\n  width: 100%;\\\\n  overflow-x: auto;\\\\n  border-radius: 4px;\\\\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\\\\n`;\\\\n\\\\nconst Table = styled.table`\\\\n  width: 100%;\\\\n  border-collapse: collapse;\\\\n  font-size: 14px;\\\\n`;\\\\n\\\\nconst TableBody = styled.tbody`\\\\n  & tr:nth-child(odd) {\\\\n    background-color: #f9f9f9;\\\\n  }\\\\n  \\\\n  & tr:hover {\\\\n    background-color: #f1f1f1;\\\\n  }\\\\n`;\\\\n\\\\nconst FilterContainer = styled.div`\\\\n  margin-bottom: 16px;\\\\n  display: flex;\\\\n  justify-content: flex-end;\\\\n`;\\\\n\\\\nconst FilterInput = styled.input`\\\\n  padding: 8px 12px;\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 4px;\\\\n  font-size: 14px;\\\\n  width: 250px;\\\\n`;\\\\n\\\\n// Main component\\\\nexport function DataTable<T extends Record<string, any>>({ \\\\n  data, \\\\n  columns, \\\\n  initialSortKey,\\\\n  initialSortDirection = 'asc',\\\\n  rowsPerPageOptions = [10, 25, 50],\\\\n  initialRowsPerPage = 10,\\\\n  onRowClick,\\\\n  className\\\\n}: DataTableProps<T>) {\\\\n  // Global filter state\\\\n  const [filterValue, setFilterValue] = useState('');\\\\n  \\\\n  // Hook usage\\\\n  const { sortedData, sortKey, sortDirection, handleSort } = useSort(data, initialSortKey, initialSortDirection);\\\\n  const { filteredData } = useFilter(sortedData, filterValue, columns);\\\\n  const { \\\\n    currentPageData, \\\\n    currentPage, \\\\n    totalPages, \\\\n    rowsPerPage,\\\\n    setCurrentPage, \\\\n    setRowsPerPage \\\\n  } = usePagination(filteredData, initialRowsPerPage);\\\\n\\\\n  // Filter change handler\\\\n  const handleFilterChange = useCallback(\\\\n    (e: React.ChangeEvent<HTMLInputElement>) => {\\\\n      setFilterValue(e.target.value);\\\\n      setCurrentPage(1); // Reset to first page when filtering\\\\n    }, \\\\n    [setCurrentPage]\\\\n  );\\\\n\\\\n  // Memoize filterable columns\\\\n  const filterableColumns = useMemo(\\\\n    () => columns.filter(column => column.filterable),\\\\n    [columns]\\\\n  );\\\\n\\\\n  return (\\\\n    <div className={className}>\\\\n      {filterableColumns.length > 0 && (\\\\n        <FilterContainer>\\\\n          <FilterInput \\\\\\n            type=\\\\\\\"text\\\\\\\" \\\\\\n            placeholder=\\\\\\\"Filter table...\\\\\\\"\\\\\\n            value={filterValue}\\\\\\n            onChange={handleFilterChange}\\\\\\n          />\\\\\\n        </FilterContainer>\\\\\\n      )}\\\\\\n      \\\\\\n      <TableContainer>\\\\\\n        <Table>\\\\\\n          <TableHeader \\\\\\n            columns={columns} \\\\\\n            sortKey={sortKey} \\\\\\n            sortDirection={sortDirection} \\\\\\n            onSort={handleSort} \\\\\\n          />\\\\\\n          <TableBody>\\\\\\n            {currentPageData.map((item, index) => (\\\\\\n              <TableRow \\\\\\n                key={index} \\\\\\n                item={item} \\\\\\n                columns={columns} \\\\\\n                onClick={onRowClick ? () => onRowClick(item) : undefined} \\\\\\n              />\\\\\\n            ))}\\\\\\n            {currentPageData.length === 0 && (\\\\\\n              <tr>\\\\\\n                <td colSpan={columns.length} style={{ textAlign: 'center', padding: '16px' }}>\\\\\\n                  No records found\\\\\\n                </td>\\\\\\n              </tr>\\\\\\n            )}\\\\\\n          </TableBody>\\\\\\n        </Table>\\\\\\n      </TableContainer>\\\\\\n      \\\\\\n      <Pagination \\\\\\n        currentPage={currentPage}\\\\\\n        totalPages={totalPages}\\\\\\n        rowsPerPage={rowsPerPage}\\\\\\n        rowsPerPageOptions={rowsPerPageOptions}\\\\\\n        onPageChange={setCurrentPage}\\\\\\n        onRowsPerPageChange={setRowsPerPage}\\\\\\n        totalItems={filteredData.length}\\\\\\n      />\\\\\\n    </div>\\\\\\n  );\\\\\\n}\\\\n```\\\\n\\\\n## Custom Hooks Implementation\\\\n\\\\n```typescript\\\\n// hooks/useSort.ts\\\\nimport { useState, useMemo } from 'react';\\\\n\\\\nexport function useSort<T extends Record<string, any>>(\\\\n  data: T[], \\\\\\n  initialSortKey?: string, \\\\\\n  initialSortDirection: 'asc' | 'desc' = 'asc'\\\\n) {\\\\n  const [sortKey, setSortKey] = useState<string | undefined>(initialSortKey);\\\\n  const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>(initialSortDirection);\\\\n\\\\n  const handleSort = (key: string) => {\\\\n    if (sortKey === key) {\\\\n      // Toggle direction if already sorting by this key\\\\n      setSortDirection(prev => prev === 'asc' ? 'desc' : 'asc');\\\\n    } else {\\\\n      // New sort key, set to ascending by default\\\\n      setSortKey(key);\\\\n      setSortDirection('asc');\\\\n    }\\\\n  };\\\\n\\\\n  const sortedData = useMemo(() => {\\\\n    if (!sortKey) return [...data];\\\\n\\\\n    return [...data].sort((a, b) => {\\\\n      const aValue = a[sortKey];\\\\n      const bValue = b[sortKey];\\\\n\\\\n      // Handle different data types\\\\n      if (typeof aValue === 'string' && typeof bValue === 'string') {\\\\n        return sortDirection === 'asc' \\\\\\n          ? aValue.localeCompare(bValue) \\\\\\n          : bValue.localeCompare(aValue);\\\\n      }\\\\n\\\\n      if (aValue === bValue) return 0;\\\\n      \\\\n      if (sortDirection === 'asc') {\\\\n        return aValue > bValue ? 1 : -1;\\\\n      } else {\\\\n        return aValue < bValue ? 1 : -1;\\\\n      }\\\\n    });\\\\n  }, [data, sortKey, sortDirection]);\\\\n\\\\n  return { sortedData, sortKey, sortDirection, handleSort };\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// hooks/useFilter.ts\\\\nimport { useMemo } from 'react';\\\\nimport { Column } from '../components/DataTable';\\\\n\\\\nexport function useFilter<T extends Record<string, any>>(\\\\n  data: T[], \\\\\\n  filterValue: string,\\\\n  columns: Column<T>[]\\\\n) {\\\\n  const filteredData = useMemo(() => {\\\\n    if (!filterValue) return data;\\\\n    \\\\n    const lowercasedFilter = filterValue.toLowerCase();\\\\n    \\\\n    return data.filter(item => {\\\\n      return columns.some(column => {\\\\n        const value = item[column.key];\\\\n        if (value == null) return false;\\\\n        \\\\n        return String(value).toLowerCase().includes(lowercasedFilter);\\\\n      });\\\\n    });\\\\n  }, [data, filterValue, columns]);\\\\n\\\\n  return { filteredData };\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// hooks/usePagination.ts\\\\nimport { useState, useMemo, useEffect } from 'react';\\\\n\\\\nexport function usePagination<T>(\\\\n  data: T[], \\\\\\n  initialRowsPerPage: number\\\\n) {\\\\n  const [currentPage, setCurrentPage] = useState(1);\\\\n  const [rowsPerPage, setRowsPerPage] = useState(initialRowsPerPage);\\\\n\\\\n  // Reset to first page when data changes\\\\n  useEffect(() => {\\\\n    setCurrentPage(1);\\\\n  }, [data.length]);\\\\n\\\\n  const totalPages = useMemo(() => \\\\\\n    Math.max(1, Math.ceil(data.length / rowsPerPage)),\\\\n    [data.length, rowsPerPage]\\\\n  );\\\\n\\\\n  // Keep current page in bounds\\\\n  useEffect(() => {\\\\n    if (currentPage > totalPages) {\\\\n      setCurrentPage(totalPages);\\\\n    }\\\\n  }, [currentPage, totalPages]);\\\\n\\\\n  const currentPageData = useMemo(() => {\\\\n    const startIndex = (currentPage - 1) * rowsPerPage;\\\\n    return data.slice(startIndex, startIndex + rowsPerPage);\\\\n  }, [data, currentPage, rowsPerPage]);\\\\n\\\\n  return { \\\\\\n    currentPageData, \\\\\\n    currentPage, \\\\\\n    totalPages, \\\\\\n    rowsPerPage,\\\\n    setCurrentPage, \\\\\\n    setRowsPerPage \\\\n  };\\\\n}\\\\n```\\\\n\\\\n## Supporting Components\\\\n\\\\n```typescript\\\\n// TableHeader.tsx\\\\nimport React from 'react';\\\\nimport styled from 'styled-components';\\\\nimport { Column } from './DataTable';\\\\n\\\\nconst HeaderRow = styled.tr`\\\\n  background-color: #f5f5f5;\\\\n  border-bottom: 2px solid #ddd;\\\\n`;\\\\n\\\\nconst HeaderCell = styled.th<{ sortable: boolean }>`\\\\n  padding: 12px 16px;\\\\n  text-align: left;\\\\n  font-weight: 600;\\\\n  cursor: ${props => props.sortable ? 'pointer' : 'default'};\\\\n  user-select: none;\\\\n  position: relative;\\\\n`;\\\\n\\\\nconst SortIcon = styled.span<{ direction: 'asc' | 'desc' }>`\\\\n  margin-left: 8px;\\\\n  &:after {\\\\n    content: '${props => props.direction === 'asc' ? '\u2191' : '\u2193'}';\\\\n    font-size: 14px;\\\\n  }\\\\n`;\\\\n\\\\ninterface TableHeaderProps<T> {\\\\n  columns: Column<T>[];\\\\n  sortKey?: string;\\\\n  sortDirection: 'asc' | 'desc';\\\\n  onSort: (key: string) => void;\\\\n}\\\\n\\\\nexport function TableHeader<T>({ \\\\\\n  columns, \\\\\\n  sortKey, \\\\\\n  sortDirection, \\\\\\n  onSort \\\\n}: TableHeaderProps<T>) {\\\\n  return (\\\\n    <thead>\\\\n      <HeaderRow>\\\\n        {columns.map(column => (\\\\n          <HeaderCell \\\\\\n          key={column.key} \\\\\\n          sortable={!!column.sortable}\\\\\\n          onClick={column.sortable ? () => onSort(column.key) : undefined}\\\\\\n        >\\\\\\n          {column.header}\\\\\\n          {sortKey === column.key && (\\\\n            <SortIcon direction={sortDirection} />\\\\n          )}\\\\\\n        </HeaderCell>\\\\n        ))}\\\\\\n      </HeaderRow>\\\\n    </thead>\\\\n  );\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// TableRow.tsx\\\\nimport React from 'react';\\\\nimport styled from 'styled-components';\\\\nimport { Column } from './DataTable';\\\\n\\\\nconst Row = styled.tr<{ clickable: boolean }>`\\\\n  cursor: ${props => props.clickable ? 'pointer' : 'default'};\\\\n`;\\\\n\\\\nconst Cell = styled.td`\\\\n  padding: 12px 16px;\\\\n  border-bottom: 1px solid #eee;\\\\n  vertical-align: top;\\\\n`;\\\\n\\\\ninterface TableRowProps<T> {\\\\n  item: T;\\\\n  columns: Column<T>[];\\\\n  onClick?: () => void;\\\\n}\\\\n\\\\nexport function TableRow<T>({ item, columns, onClick }: TableRowProps<T>) {\\\\n  return (\\\\n    <Row clickable={!!onClick} onClick={onClick}>\\\\\\n      {columns.map(column => (\\\\n        <Cell key={column.key}>\\\\\\n          {column.renderCell ? column.renderCell(item) : String(item[column.key] ?? '')}\\\\\\n        </Cell>\\\\n      ))}\\\\\\n    </Row>\\\\n  );\\\\n}\\\\n```\\\\n\\\\n```typescript\\\\n// Pagination.tsx\\\\nimport React from 'react';\\\\nimport styled from 'styled-components';\\\\n\\\\nconst PaginationContainer = styled.div`\\\\n  display: flex;\\\\n  justify-content: space-between;\\\\n  align-items: center;\\\\n  margin-top: 16px;\\\\n  font-size: 14px;\\\\n`;\\\\n\\\\nconst PageInfo = styled.div`\\\\n  color: #666;\\\\n`;\\\\n\\\\nconst PageControls = styled.div`\\\\n  display: flex;\\\\n  align-items: center;\\\\n`;\\\\n\\\\nconst PageButton = styled.button<{ active?: boolean }>`\\\\n  padding: 6px 12px;\\\\n  margin: 0 4px;\\\\n  background-color: ${props => props.active ? '#007bff' : 'white'};\\\\n  color: ${props => props.active ? 'white' : '#333'};\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 4px;\\\\n  cursor: pointer;\\\\n  \\\\n  &:disabled {\\\\n    opacity: 0.5;\\\\n    cursor: not-allowed;\\\\n  }\\\\n  \\\\n  &:hover:not(:disabled) {\\\\n    background-color: ${props => props.active ? '#007bff' : '#f1f1f1'};\\\\n  }\\\\n`;\\\\n\\\\nconst RowsPerPageSelect = styled.select`\\\\n  padding: 6px 8px;\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 4px;\\\\n  margin-left: 8px;\\\\n`;\\\\n\\\\ninterface PaginationProps {\\\\n  currentPage: number;\\\\n  totalPages: number;\\\\n  rowsPerPage: number;\\\\n  rowsPerPageOptions: number[];\\\\n  totalItems: number;\\\\n  onPageChange: (page: number) => void;\\\\n  onRowsPerPageChange: (rowsPerPage: number) => void;\\\\n}\\\\n\\\\nexport function Pagination({ \\\\\\n  currentPage, \\\\\\n  totalPages, \\\\\\n  rowsPerPage, \\\\\\n  rowsPerPageOptions, \\\\\\n  totalItems,\\\\n  onPageChange, \\\\\\n  onRowsPerPageChange \\\\n}: PaginationProps) {\\\\n  // Calculate start and end item numbers\\\\n  const startItem = Math.min(totalItems, (currentPage - 1) * rowsPerPage + 1);\\\\n  const endItem = Math.min(totalItems, startItem + rowsPerPage - 1);\\\\n  \\\\n  // Generate page buttons\\\\n  const getPageButtons = () => {\\\\n    const buttons = [];\\\\n    \\\\n    // Always show first page\\\\n    buttons.push(\\\\n      <PageButton \\\\\\n      key=\\\\\\\"first\\\\\\\" \\\\\\n      active={currentPage === 1}\\\\\\n      onClick={() => onPageChange(1)}\\\\\\n      disabled={currentPage === 1}\\\\\\n    >\\\\\\n      1\\\\\\n    </PageButton>\\\\n    );\\\\n    \\\\n    // Show ellipsis if needed\\\\n    if (currentPage > 3) {\\\\n      buttons.push(<span key=\\\\\\\"ellipsis1\\\\\\\">...</span>);\\\\n    }\\\\n    \\\\n    // Show pages around current page\\\\n    for (let i = Math.max(2, currentPage - 1); i <= Math.min(totalPages - 1, currentPage + 1); i++) {\\\\n      buttons.push(\\\\n        <PageButton \\\\\\n      key={i} \\\\\\n      active={currentPage === i}\\\\\\n      onClick={() => onPageChange(i)}\\\\\\n    >\\\\\\n      {i}\\\\\\n    </PageButton>\\\\n      );\\\\n    }\\\\n    \\\\n    // Show ellipsis if needed\\\\n    if (currentPage < totalPages - 2) {\\\\n      buttons.push(<span key=\\\\\\\"ellipsis2\\\\\\\">...</span>);\\\\n    }\\\\n    \\\\n    // Always show last page if there's more than one page\\\\n    if (totalPages > 1) {\\\\n      buttons.push(\\\\n        <PageButton \\\\\\n      key=\\\\\\\"last\\\\\\\" \\\\\\n      active={currentPage === totalPages}\\\\\\n      onClick={() => onPageChange(totalPages)}\\\\\\n      disabled={currentPage === totalPages}\\\\\\n    >\\\\\\n      {totalPages}\\\\\\n    </PageButton>\\\\n      );\\\\n    }\\\\n    \\\\n    return buttons;\\\\n  };\\\\n\\\\n  return (\\\\n    <PaginationContainer>\\\\n      <PageInfo>\\\\n        Showing {totalItems ? `${startItem}-${endItem} of ${totalItems}` : '0'} results\\\\n      </PageInfo>\\\\n      \\\\n      <PageControls>\\\\n        <PageButton \\\\\\n      onClick={() => onPageChange(currentPage - 1)}\\\\\\n      disabled={currentPage === 1}\\\\\\n    >\\\\\\n      Previous\\\\\\n    </PageButton>\\\\n        \\\\\\n        {getPageButtons()}\\\\\\n        \\\\\\n        <PageButton \\\\\\n          onClick={() => onPageChange(currentPage + 1)}\\\\\\n          disabled={currentPage === totalPages}\\\\\\n        >\\\\\\n          Next\\\\\\n        </PageButton>\\\\n        \\\\\\n        <span style={{ marginLeft: '16px' }}>Rows per page:</span>\\\\\\n        <RowsPerPageSelect \\\\\\n          value={rowsPerPage}\\\\\\n          onChange={(e) => onRowsPerPageChange(Number(e.target.value))}\\\\\\n        >\\\\\\n          {rowsPerPageOptions.map(option => (\\\\n            <option key={option} value={option}>{option}</option>\\\\n          ))}\\\\\\n        </RowsPerPageSelect>\\\\\\n      </PageControls>\\\\\\n    </PaginationContainer>\\\\n  );\\\\n}\\\\n```\\\\n\\\\n## Usage Example\\\\n\\\\n```tsx\\\\nimport React from 'react';\\\\nimport { DataTable } from './components/DataTable';\\\\n\\\\ninterface User {\\\\n  id: number;\\\\n  name: string;\\\\n  email: string;\\\\n  role: string;\\\\n  status: 'active' | 'inactive';\\\\n  lastLogin: string;\\\\n}\\\\n\\\\nconst users: User[] = [\\\\n  { id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin', status: 'active', lastLogin: '2023-05-15T10:30:00Z' },\\\\n  { id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'Editor', status: 'active', lastLogin: '2023-05-14T09:15:00Z' },\\\\n  // Add more users as needed\\\\n];\\\\n\\\\nfunction UserTable() {\\\\n  const columns = [\\\\n    { key: 'id', header: 'ID', sortable: true },\\\\n    { key: 'name', header: 'Name', sortable: true, filterable: true },\\\\n    { key: 'email', header: 'Email', filterable: true },\\\\n    { key: 'role', header: 'Role', sortable: true, filterable: true },\\\\n    { \\\\\\n      key: 'status', \\\\\\n      header: 'Status', \\\\\\n      sortable: true,\\\\\\n      renderCell: (user: User) => (\\\\n        <span style={{ \\\\\\n        color: user.status === 'active' ? 'green' : 'red',\\\\\\n        fontWeight: 'bold'\\\\\\n      }}>\\\\\\n        {user.status}\\\\\\n      </span>\\\\n      )\\\\n    },\\\\n    { \\\\\\n      key: 'lastLogin', \\\\\\n      header: 'Last Login', \\\\\\n      sortable: true,\\\\\\n      renderCell: (user: User) => new Date(user.lastLogin).toLocaleString()\\\\n    },\\\\n  ];\\\\n\\\\n  const handleRowClick = (user: User) => {\\\\n    console.log('User clicked:', user);\\\\n    // Navigate to user detail page or show modal\\\\n  };\\\\n\\\\n  return (\\\\n    <div>\\\\n      <h1>User Management</h1>\\\\n      <DataTable \\\\\\n        data={users}\\\\\\n        columns={columns}\\\\\\n        initialSortKey=\\\\\\\"id\\\\\\\"\\\\\\n        initialRowsPerPage={10}\\\\\\n        rowsPerPageOptions={[5, 10, 25, 50]}\\\\\\n        onRowClick={handleRowClick}\\\\\\n      />\\\\n    </div>\\\\n  );\\\\n}\\\\n\\\\nexport default UserTable;\\\\n```\\\\n\\\\n## Installation Instructions\\\\n\\\\nTo use this component, you'll need to have these dependencies installed:\\\\n\\\\n```bash\\\\nnpm install styled-components @types/styled-components\\\\n```\\\\n\\\\nor\\\\n\\\\n```bash\\\\nyarn add styled-components @types/styled-components\\\\n```\\\\n\\\\n## MCP Resources Used\\\\n\\\\n- `@file:///project/src/components/` - Examined your existing component structure to match the styling approach and component patterns\\\\n- `@memory://coding-preferences` - Retrieved your preference for functional components, React 18, and TypeScript\\\\n\\\\nThe component follows modern React best practices with proper TypeScript typing, modular structure, and optimized performance through memoization. The styled-components implementation ensures consistent styling that can be customized to match your application's design system.\\\"\\n    }\\n  ],\\n  \\\"metadata\\\": {\\n    \\\"created_at\\\": \\\"2023-05-15T12:00:00Z\\\",\\n    \\\"updated_at\\\": \\\"2023-05-15T12:00:00Z\\\",\\n    \\\"author\\\": \\\"MCP-Prompts Team\\\",\\n    \\\"category\\\": \\\"development\\\",\\n    \\\"mcp_requirements\\\": [\\n      \\\"MCP Filesystem Server\\\",\\n      \\\"MCP GitHub Server\\\",\\n      \\\"MCP Sequential Thinking Server\\\",\\n      \\\"MCP Memory Server",
  "variables": {},
  "metadata": {
    "source": "/home/sparrow/projects/mcp-prompts/prompts/mcp-code-generator.json",
    "imported": true
  }
}
```

