workspace-architect 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +1 -0
- package/.gitattributes +1 -0
- package/.github/workflows/manual-publish.yml +36 -0
- package/.github/workflows/sync-and-publish.yml +58 -0
- package/.release-it.json +20 -0
- package/CHANGELOG.md +43 -0
- package/README.md +62 -0
- package/assets/chatmodes/4.1-Beast.chatmode.md +152 -0
- package/assets/chatmodes/Thinking-Beast-Mode.chatmode.md +337 -0
- package/assets/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +644 -0
- package/assets/chatmodes/accessibility.chatmode.md +298 -0
- package/assets/chatmodes/address-comments.chatmode.md +59 -0
- package/assets/chatmodes/aem-frontend-specialist.chatmode.md +385 -0
- package/assets/chatmodes/api-architect.chatmode.md +40 -0
- package/assets/chatmodes/atlassian-requirements-to-jira.chatmode.md +444 -0
- package/assets/chatmodes/azure-logic-apps-expert.chatmode.md +100 -0
- package/assets/chatmodes/azure-principal-architect.chatmode.md +58 -0
- package/assets/chatmodes/azure-saas-architect.chatmode.md +118 -0
- package/assets/chatmodes/azure-verified-modules-bicep.chatmode.md +44 -0
- package/assets/chatmodes/azure-verified-modules-terraform.chatmode.md +58 -0
- package/assets/chatmodes/bicep-implement.chatmode.md +40 -0
- package/assets/chatmodes/bicep-plan.chatmode.md +112 -0
- package/assets/chatmodes/blueprint-mode-codex.chatmode.md +110 -0
- package/assets/chatmodes/blueprint-mode.chatmode.md +171 -0
- package/assets/chatmodes/clojure-interactive-programming.chatmode.md +174 -0
- package/assets/chatmodes/code-tour.chatmode.md +205 -0
- package/assets/chatmodes/critical-thinking.chatmode.md +23 -0
- package/assets/chatmodes/csharp-dotnet-janitor.chatmode.md +83 -0
- package/assets/chatmodes/csharp-mcp-expert.chatmode.md +69 -0
- package/assets/chatmodes/debug.chatmode.md +79 -0
- package/assets/chatmodes/declarative-agents-architect.chatmode.md +76 -0
- package/assets/chatmodes/demonstrate-understanding.chatmode.md +60 -0
- package/assets/chatmodes/dotnet-upgrade.chatmode.md +222 -0
- package/assets/chatmodes/drupal-expert.chatmode.md +687 -0
- package/assets/chatmodes/electron-angular-native.chatmode.md +285 -0
- package/assets/chatmodes/expert-cpp-software-engineer.chatmode.md +27 -0
- package/assets/chatmodes/expert-dotnet-software-engineer.chatmode.md +22 -0
- package/assets/chatmodes/expert-nextjs-developer.chatmode.md +477 -0
- package/assets/chatmodes/expert-react-frontend-engineer.chatmode.md +738 -0
- package/assets/chatmodes/gilfoyle.chatmode.md +66 -0
- package/assets/chatmodes/go-mcp-expert.chatmode.md +122 -0
- package/assets/chatmodes/gpt-5-beast-mode.chatmode.md +109 -0
- package/assets/chatmodes/hlbpa.chatmode.md +232 -0
- package/assets/chatmodes/implementation-plan.chatmode.md +159 -0
- package/assets/chatmodes/janitor.chatmode.md +89 -0
- package/assets/chatmodes/java-mcp-expert.chatmode.md +325 -0
- package/assets/chatmodes/kotlin-mcp-expert.chatmode.md +181 -0
- package/assets/chatmodes/kusto-assistant.chatmode.md +143 -0
- package/assets/chatmodes/laravel-expert-agent.chatmode.md +628 -0
- package/assets/chatmodes/mentor.chatmode.md +32 -0
- package/assets/chatmodes/meta-agentic-project-scaffold.chatmode.md +15 -0
- package/assets/chatmodes/microsoft-agent-framework-dotnet.chatmode.md +62 -0
- package/assets/chatmodes/microsoft-agent-framework-python.chatmode.md +62 -0
- package/assets/chatmodes/microsoft-study-mode.chatmode.md +32 -0
- package/assets/chatmodes/microsoft_learn_contributor.chatmode.md +388 -0
- package/assets/chatmodes/ms-sql-dba.chatmode.md +25 -0
- package/assets/chatmodes/php-mcp-expert.chatmode.md +498 -0
- package/assets/chatmodes/pimcore-expert.chatmode.md +869 -0
- package/assets/chatmodes/plan.chatmode.md +114 -0
- package/assets/chatmodes/planner.chatmode.md +14 -0
- package/assets/chatmodes/playwright-tester.chatmode.md +13 -0
- package/assets/chatmodes/postgresql-dba.chatmode.md +17 -0
- package/assets/chatmodes/power-bi-data-modeling-expert.chatmode.md +319 -0
- package/assets/chatmodes/power-bi-dax-expert.chatmode.md +334 -0
- package/assets/chatmodes/power-bi-performance-expert.chatmode.md +533 -0
- package/assets/chatmodes/power-bi-visualization-expert.chatmode.md +549 -0
- package/assets/chatmodes/power-platform-expert.chatmode.md +116 -0
- package/assets/chatmodes/power-platform-mcp-integration-expert.chatmode.md +149 -0
- package/assets/chatmodes/prd.chatmode.md +201 -0
- package/assets/chatmodes/principal-software-engineer.chatmode.md +41 -0
- package/assets/chatmodes/prompt-builder.chatmode.md +352 -0
- package/assets/chatmodes/prompt-engineer.chatmode.md +72 -0
- package/assets/chatmodes/python-mcp-expert.chatmode.md +99 -0
- package/assets/chatmodes/refine-issue.chatmode.md +34 -0
- package/assets/chatmodes/research-technical-spike.chatmode.md +169 -0
- package/assets/chatmodes/ruby-mcp-expert.chatmode.md +346 -0
- package/assets/chatmodes/rust-gpt-4.1-beast-mode.chatmode.md +197 -0
- package/assets/chatmodes/rust-mcp-expert.chatmode.md +465 -0
- package/assets/chatmodes/search-ai-optimization-expert.chatmode.md +227 -0
- package/assets/chatmodes/semantic-kernel-dotnet.chatmode.md +31 -0
- package/assets/chatmodes/semantic-kernel-python.chatmode.md +28 -0
- package/assets/chatmodes/shopify-expert.chatmode.md +681 -0
- package/assets/chatmodes/simple-app-idea-generator.chatmode.md +134 -0
- package/assets/chatmodes/software-engineer-agent-v1.chatmode.md +164 -0
- package/assets/chatmodes/specification.chatmode.md +127 -0
- package/assets/chatmodes/swift-mcp-expert.chatmode.md +240 -0
- package/assets/chatmodes/task-planner.chatmode.md +374 -0
- package/assets/chatmodes/task-researcher.chatmode.md +254 -0
- package/assets/chatmodes/tdd-green.chatmode.md +59 -0
- package/assets/chatmodes/tdd-red.chatmode.md +59 -0
- package/assets/chatmodes/tdd-refactor.chatmode.md +84 -0
- package/assets/chatmodes/tech-debt-remediation-plan.chatmode.md +49 -0
- package/assets/chatmodes/terraform-azure-implement.chatmode.md +104 -0
- package/assets/chatmodes/terraform-azure-planning.chatmode.md +157 -0
- package/assets/chatmodes/typescript-mcp-expert.chatmode.md +91 -0
- package/assets/chatmodes/voidbeast-gpt41enhanced.chatmode.md +230 -0
- package/assets/chatmodes/wg-code-alchemist.chatmode.md +61 -0
- package/assets/chatmodes/wg-code-sentinel.chatmode.md +55 -0
- package/assets/collections/ai-prompt-engineering.json +18 -0
- package/assets/collections/angular-development.json +7 -0
- package/assets/collections/azure-cloud-architect.json +29 -0
- package/assets/collections/cpp-development.json +6 -0
- package/assets/collections/database-administration.json +8 -0
- package/assets/collections/devops-sre.json +11 -0
- package/assets/collections/dotnet-development.json +22 -0
- package/assets/collections/general-productivity.json +9 -0
- package/assets/collections/go-development.json +7 -0
- package/assets/collections/java-spring-developer.json +26 -0
- package/assets/collections/learning-mentoring.json +10 -0
- package/assets/collections/legacy-migration.json +4 -0
- package/assets/collections/mcp-specialist.json +41 -0
- package/assets/collections/mobile-development.json +4 -0
- package/assets/collections/php-cms-development.json +11 -0
- package/assets/collections/power-platform-specialist.json +31 -0
- package/assets/collections/project-management.json +12 -0
- package/assets/collections/python-development.json +13 -0
- package/assets/collections/quality-assurance.json +13 -0
- package/assets/collections/ruby-development.json +9 -0
- package/assets/collections/rust-development.json +10 -0
- package/assets/collections/security-specialist.json +8 -0
- package/assets/collections/software-architect.json +25 -0
- package/assets/collections/technical-writing.json +9 -0
- package/assets/collections/web-frontend-development.json +14 -0
- package/assets/instructions/a11y.instructions.md +369 -0
- package/assets/instructions/ai-prompt-engineering-safety-best-practices.instructions.md +867 -0
- package/assets/instructions/angular.instructions.md +104 -0
- package/assets/instructions/ansible.instructions.md +88 -0
- package/assets/instructions/aspnet-rest-apis.instructions.md +110 -0
- package/assets/instructions/astro.instructions.md +182 -0
- package/assets/instructions/azure-devops-pipelines.instructions.md +185 -0
- package/assets/instructions/azure-functions-typescript.instructions.md +14 -0
- package/assets/instructions/azure-logic-apps-power-automate.instructions.md +1943 -0
- package/assets/instructions/azure-verified-modules-terraform.instructions.md +229 -0
- package/assets/instructions/bicep-code-best-practices.instructions.md +54 -0
- package/assets/instructions/blazor.instructions.md +77 -0
- package/assets/instructions/clojure.instructions.md +349 -0
- package/assets/instructions/cmake-vcpkg.instructions.md +10 -0
- package/assets/instructions/codexer.instructions.md +428 -0
- package/assets/instructions/coldfusion-cfc.instructions.md +30 -0
- package/assets/instructions/coldfusion-cfm.instructions.md +28 -0
- package/assets/instructions/collections.instructions.md +54 -0
- package/assets/instructions/containerization-docker-best-practices.instructions.md +681 -0
- package/assets/instructions/convert-jpa-to-spring-data-cosmos.instructions.md +949 -0
- package/assets/instructions/copilot-thought-logging.instructions.md +62 -0
- package/assets/instructions/csharp-ja.instructions.md +114 -0
- package/assets/instructions/csharp-ko.instructions.md +77 -0
- package/assets/instructions/csharp-mcp-server.instructions.md +95 -0
- package/assets/instructions/csharp.instructions.md +114 -0
- package/assets/instructions/dart-n-flutter.instructions.md +447 -0
- package/assets/instructions/declarative-agents-microsoft365.instructions.md +316 -0
- package/assets/instructions/devbox-image-definition.instructions.md +302 -0
- package/assets/instructions/devops-core-principles.instructions.md +167 -0
- package/assets/instructions/dotnet-architecture-good-practices.instructions.md +279 -0
- package/assets/instructions/dotnet-framework.instructions.md +113 -0
- package/assets/instructions/dotnet-maui-9-to-dotnet-maui-10-upgrade.instructions.md +1922 -0
- package/assets/instructions/dotnet-maui.instructions.md +69 -0
- package/assets/instructions/dotnet-upgrade.instructions.md +287 -0
- package/assets/instructions/dotnet-wpf.instructions.md +79 -0
- package/assets/instructions/genaiscript.instructions.md +21 -0
- package/assets/instructions/generate-modern-terraform-code-for-azure.instructions.md +82 -0
- package/assets/instructions/gilfoyle-code-review.instructions.md +114 -0
- package/assets/instructions/github-actions-ci-cd-best-practices.instructions.md +607 -0
- package/assets/instructions/go-mcp-server.instructions.md +346 -0
- package/assets/instructions/go.instructions.md +373 -0
- package/assets/instructions/instructions.instructions.md +256 -0
- package/assets/instructions/java-11-to-java-17-upgrade.instructions.md +793 -0
- package/assets/instructions/java-17-to-java-21-upgrade.instructions.md +464 -0
- package/assets/instructions/java-21-to-java-25-upgrade.instructions.md +311 -0
- package/assets/instructions/java-mcp-server.instructions.md +553 -0
- package/assets/instructions/java.instructions.md +81 -0
- package/assets/instructions/joyride-user-project.instructions.md +206 -0
- package/assets/instructions/joyride-workspace-automation.instructions.md +46 -0
- package/assets/instructions/kotlin-mcp-server.instructions.md +481 -0
- package/assets/instructions/kubernetes-deployment-best-practices.instructions.md +307 -0
- package/assets/instructions/langchain-python.instructions.md +229 -0
- package/assets/instructions/localization.instructions.md +39 -0
- package/assets/instructions/makefile.instructions.md +410 -0
- package/assets/instructions/markdown.instructions.md +52 -0
- package/assets/instructions/memory-bank.instructions.md +299 -0
- package/assets/instructions/mongo-dba.instructions.md +25 -0
- package/assets/instructions/ms-sql-dba.instructions.md +25 -0
- package/assets/instructions/nestjs.instructions.md +406 -0
- package/assets/instructions/nextjs-tailwind.instructions.md +72 -0
- package/assets/instructions/nextjs.instructions.md +143 -0
- package/assets/instructions/nodejs-javascript-vitest.instructions.md +30 -0
- package/assets/instructions/object-calisthenics.instructions.md +302 -0
- package/assets/instructions/oqtane.instructions.md +86 -0
- package/assets/instructions/performance-optimization.instructions.md +420 -0
- package/assets/instructions/php-mcp-server.instructions.md +809 -0
- package/assets/instructions/playwright-dotnet.instructions.md +101 -0
- package/assets/instructions/playwright-python.instructions.md +62 -0
- package/assets/instructions/playwright-typescript.instructions.md +86 -0
- package/assets/instructions/power-apps-canvas-yaml.instructions.md +827 -0
- package/assets/instructions/power-apps-code-apps.instructions.md +601 -0
- package/assets/instructions/power-bi-custom-visuals-development.instructions.md +810 -0
- package/assets/instructions/power-bi-data-modeling-best-practices.instructions.md +639 -0
- package/assets/instructions/power-bi-dax-best-practices.instructions.md +795 -0
- package/assets/instructions/power-bi-devops-alm-best-practices.instructions.md +623 -0
- package/assets/instructions/power-bi-report-design-best-practices.instructions.md +752 -0
- package/assets/instructions/power-bi-security-rls-best-practices.instructions.md +504 -0
- package/assets/instructions/power-platform-connector.instructions.md +430 -0
- package/assets/instructions/power-platform-mcp-development.instructions.md +88 -0
- package/assets/instructions/powershell-pester-5.instructions.md +197 -0
- package/assets/instructions/powershell.instructions.md +356 -0
- package/assets/instructions/prompt.instructions.md +73 -0
- package/assets/instructions/python-mcp-server.instructions.md +204 -0
- package/assets/instructions/python.instructions.md +56 -0
- package/assets/instructions/quarkus-mcp-server-sse.instructions.md +49 -0
- package/assets/instructions/quarkus.instructions.md +98 -0
- package/assets/instructions/r.instructions.md +116 -0
- package/assets/instructions/reactjs.instructions.md +162 -0
- package/assets/instructions/ruby-mcp-server.instructions.md +629 -0
- package/assets/instructions/ruby-on-rails.instructions.md +124 -0
- package/assets/instructions/rust-mcp-server.instructions.md +715 -0
- package/assets/instructions/rust.instructions.md +135 -0
- package/assets/instructions/security-and-owasp.instructions.md +51 -0
- package/assets/instructions/self-explanatory-code-commenting.instructions.md +162 -0
- package/assets/instructions/shell.instructions.md +132 -0
- package/assets/instructions/spec-driven-workflow-v1.instructions.md +323 -0
- package/assets/instructions/springboot.instructions.md +68 -0
- package/assets/instructions/sql-sp-generation.instructions.md +74 -0
- package/assets/instructions/svelte.instructions.md +161 -0
- package/assets/instructions/swift-mcp-server.instructions.md +498 -0
- package/assets/instructions/taming-copilot.instructions.md +40 -0
- package/assets/instructions/tanstack-start-shadcn-tailwind.instructions.md +212 -0
- package/assets/instructions/task-implementation.instructions.md +190 -0
- package/assets/instructions/tasksync.instructions.md +352 -0
- package/assets/instructions/terraform-azure.instructions.md +254 -0
- package/assets/instructions/terraform-sap-btp.instructions.md +195 -0
- package/assets/instructions/terraform.instructions.md +113 -0
- package/assets/instructions/typescript-5-es2022.instructions.md +114 -0
- package/assets/instructions/typescript-mcp-server.instructions.md +228 -0
- package/assets/instructions/update-code-from-shorthand.instructions.md +130 -0
- package/assets/instructions/vuejs3.instructions.md +153 -0
- package/assets/instructions/wordpress.instructions.md +186 -0
- package/assets/prompts/add-educational-comments.prompt.md +129 -0
- package/assets/prompts/ai-prompt-engineering-safety-review.prompt.md +230 -0
- package/assets/prompts/architecture-blueprint-generator.prompt.md +322 -0
- package/assets/prompts/aspnet-minimal-api-openapi.prompt.md +42 -0
- package/assets/prompts/az-cost-optimize.prompt.md +305 -0
- package/assets/prompts/azure-resource-health-diagnose.prompt.md +290 -0
- package/assets/prompts/boost-prompt.prompt.md +25 -0
- package/assets/prompts/breakdown-epic-arch.prompt.md +66 -0
- package/assets/prompts/breakdown-epic-pm.prompt.md +58 -0
- package/assets/prompts/breakdown-feature-implementation.prompt.md +128 -0
- package/assets/prompts/breakdown-feature-prd.prompt.md +61 -0
- package/assets/prompts/breakdown-plan.prompt.md +509 -0
- package/assets/prompts/breakdown-test.prompt.md +365 -0
- package/assets/prompts/code-exemplars-blueprint-generator.prompt.md +126 -0
- package/assets/prompts/comment-code-generate-a-tutorial.prompt.md +26 -0
- package/assets/prompts/containerize-aspnet-framework.prompt.md +455 -0
- package/assets/prompts/containerize-aspnetcore.prompt.md +393 -0
- package/assets/prompts/conventional-commit.prompt.md +73 -0
- package/assets/prompts/copilot-instructions-blueprint-generator.prompt.md +294 -0
- package/assets/prompts/cosmosdb-datamodeling.prompt.md +1045 -0
- package/assets/prompts/create-agentsmd.prompt.md +249 -0
- package/assets/prompts/create-architectural-decision-record.prompt.md +97 -0
- package/assets/prompts/create-github-action-workflow-specification.prompt.md +276 -0
- package/assets/prompts/create-github-issue-feature-from-specification.prompt.md +28 -0
- package/assets/prompts/create-github-issues-feature-from-implementation-plan.prompt.md +28 -0
- package/assets/prompts/create-github-issues-for-unmet-specification-requirements.prompt.md +35 -0
- package/assets/prompts/create-github-pull-request-from-specification.prompt.md +24 -0
- package/assets/prompts/create-implementation-plan.prompt.md +157 -0
- package/assets/prompts/create-llms.prompt.md +210 -0
- package/assets/prompts/create-oo-component-documentation.prompt.md +193 -0
- package/assets/prompts/create-readme.prompt.md +21 -0
- package/assets/prompts/create-specification.prompt.md +127 -0
- package/assets/prompts/create-spring-boot-java-project.prompt.md +163 -0
- package/assets/prompts/create-spring-boot-kotlin-project.prompt.md +147 -0
- package/assets/prompts/create-technical-spike.prompt.md +231 -0
- package/assets/prompts/csharp-async.prompt.md +50 -0
- package/assets/prompts/csharp-docs.prompt.md +63 -0
- package/assets/prompts/csharp-mcp-server-generator.prompt.md +59 -0
- package/assets/prompts/csharp-mstest.prompt.md +67 -0
- package/assets/prompts/csharp-nunit.prompt.md +72 -0
- package/assets/prompts/csharp-tunit.prompt.md +101 -0
- package/assets/prompts/csharp-xunit.prompt.md +69 -0
- package/assets/prompts/declarative-agents.prompt.md +93 -0
- package/assets/prompts/documentation-writer.prompt.md +46 -0
- package/assets/prompts/dotnet-best-practices.prompt.md +84 -0
- package/assets/prompts/dotnet-design-pattern-review.prompt.md +41 -0
- package/assets/prompts/dotnet-upgrade.prompt.md +116 -0
- package/assets/prompts/editorconfig.prompt.md +64 -0
- package/assets/prompts/ef-core.prompt.md +76 -0
- package/assets/prompts/finalize-agent-prompt.prompt.md +27 -0
- package/assets/prompts/first-ask.prompt.md +29 -0
- package/assets/prompts/folder-structure-blueprint-generator.prompt.md +405 -0
- package/assets/prompts/gen-specs-as-issues.prompt.md +165 -0
- package/assets/prompts/generate-custom-instructions-from-codebase.prompt.md +240 -0
- package/assets/prompts/git-flow-branch-creator.prompt.md +293 -0
- package/assets/prompts/github-copilot-starter.prompt.md +372 -0
- package/assets/prompts/go-mcp-server-generator.prompt.md +334 -0
- package/assets/prompts/java-docs.prompt.md +24 -0
- package/assets/prompts/java-junit.prompt.md +64 -0
- package/assets/prompts/java-mcp-server-generator.prompt.md +756 -0
- package/assets/prompts/java-refactoring-extract-method.prompt.md +105 -0
- package/assets/prompts/java-refactoring-remove-parameter.prompt.md +85 -0
- package/assets/prompts/java-springboot.prompt.md +66 -0
- package/assets/prompts/javascript-typescript-jest.prompt.md +44 -0
- package/assets/prompts/kotlin-mcp-server-generator.prompt.md +449 -0
- package/assets/prompts/kotlin-springboot.prompt.md +71 -0
- package/assets/prompts/mcp-copilot-studio-server-generator.prompt.md +118 -0
- package/assets/prompts/memory-merger.prompt.md +107 -0
- package/assets/prompts/mkdocs-translations.prompt.md +110 -0
- package/assets/prompts/model-recommendation.prompt.md +677 -0
- package/assets/prompts/multi-stage-dockerfile.prompt.md +47 -0
- package/assets/prompts/my-issues.prompt.md +9 -0
- package/assets/prompts/my-pull-requests.prompt.md +15 -0
- package/assets/prompts/next-intl-add-language.prompt.md +20 -0
- package/assets/prompts/php-mcp-server-generator.prompt.md +522 -0
- package/assets/prompts/playwright-automation-fill-in-form.prompt.md +30 -0
- package/assets/prompts/playwright-explore-website.prompt.md +19 -0
- package/assets/prompts/playwright-generate-test.prompt.md +19 -0
- package/assets/prompts/postgresql-code-review.prompt.md +214 -0
- package/assets/prompts/postgresql-optimization.prompt.md +406 -0
- package/assets/prompts/power-apps-code-app-scaffold.prompt.md +150 -0
- package/assets/prompts/power-bi-dax-optimization.prompt.md +175 -0
- package/assets/prompts/power-bi-model-design-review.prompt.md +405 -0
- package/assets/prompts/power-bi-performance-troubleshooting.prompt.md +384 -0
- package/assets/prompts/power-bi-report-design-consultation.prompt.md +353 -0
- package/assets/prompts/power-platform-mcp-connector-suite.prompt.md +156 -0
- package/assets/prompts/project-workflow-analysis-blueprint-generator.prompt.md +294 -0
- package/assets/prompts/prompt-builder.prompt.md +142 -0
- package/assets/prompts/pytest-coverage.prompt.md +28 -0
- package/assets/prompts/python-mcp-server-generator.prompt.md +105 -0
- package/assets/prompts/readme-blueprint-generator.prompt.md +79 -0
- package/assets/prompts/remember-interactive-programming.prompt.md +13 -0
- package/assets/prompts/remember.prompt.md +125 -0
- package/assets/prompts/repo-story-time.prompt.md +156 -0
- package/assets/prompts/review-and-refactor.prompt.md +15 -0
- package/assets/prompts/ruby-mcp-server-generator.prompt.md +660 -0
- package/assets/prompts/rust-mcp-server-generator.prompt.md +578 -0
- package/assets/prompts/shuffle-json-data.prompt.md +151 -0
- package/assets/prompts/sql-code-review.prompt.md +303 -0
- package/assets/prompts/sql-optimization.prompt.md +298 -0
- package/assets/prompts/suggest-awesome-github-copilot-agents.prompt.md +72 -0
- package/assets/prompts/suggest-awesome-github-copilot-chatmodes.prompt.md +71 -0
- package/assets/prompts/suggest-awesome-github-copilot-collections.prompt.md +149 -0
- package/assets/prompts/suggest-awesome-github-copilot-instructions.prompt.md +88 -0
- package/assets/prompts/suggest-awesome-github-copilot-prompts.prompt.md +71 -0
- package/assets/prompts/swift-mcp-server-generator.prompt.md +669 -0
- package/assets/prompts/technology-stack-blueprint-generator.prompt.md +242 -0
- package/assets/prompts/typescript-mcp-server-generator.prompt.md +90 -0
- package/assets/prompts/update-avm-modules-in-bicep.prompt.md +60 -0
- package/assets/prompts/update-implementation-plan.prompt.md +157 -0
- package/assets/prompts/update-llms.prompt.md +216 -0
- package/assets/prompts/update-markdown-file-index.prompt.md +76 -0
- package/assets/prompts/update-oo-component-documentation.prompt.md +162 -0
- package/assets/prompts/update-specification.prompt.md +127 -0
- package/assets/prompts/write-coding-standards-from-file.prompt.md +316 -0
- package/bin/cli.js +200 -0
- package/package.json +53 -0
- package/scripts/sync.js +99 -0
- package/verdaccio/config.yaml +202 -0
|
@@ -0,0 +1,756 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 'Generate a complete Model Context Protocol server project in Java using the official MCP Java SDK with reactive streams and optional Spring Boot integration.'
|
|
3
|
+
mode: agent
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Java MCP Server Generator
|
|
7
|
+
|
|
8
|
+
Generate a complete, production-ready MCP server in Java using the official Java SDK with Maven or Gradle.
|
|
9
|
+
|
|
10
|
+
## Project Generation
|
|
11
|
+
|
|
12
|
+
When asked to create a Java MCP server, generate a complete project with this structure:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
my-mcp-server/
|
|
16
|
+
├── pom.xml (or build.gradle.kts)
|
|
17
|
+
├── src/
|
|
18
|
+
│ ├── main/
|
|
19
|
+
│ │ ├── java/
|
|
20
|
+
│ │ │ └── com/example/mcp/
|
|
21
|
+
│ │ │ ├── McpServerApplication.java
|
|
22
|
+
│ │ │ ├── config/
|
|
23
|
+
│ │ │ │ └── ServerConfiguration.java
|
|
24
|
+
│ │ │ ├── tools/
|
|
25
|
+
│ │ │ │ ├── ToolDefinitions.java
|
|
26
|
+
│ │ │ │ └── ToolHandlers.java
|
|
27
|
+
│ │ │ ├── resources/
|
|
28
|
+
│ │ │ │ ├── ResourceDefinitions.java
|
|
29
|
+
│ │ │ │ └── ResourceHandlers.java
|
|
30
|
+
│ │ │ └── prompts/
|
|
31
|
+
│ │ │ ├── PromptDefinitions.java
|
|
32
|
+
│ │ │ └── PromptHandlers.java
|
|
33
|
+
│ │ └── resources/
|
|
34
|
+
│ │ └── application.properties (if using Spring)
|
|
35
|
+
│ └── test/
|
|
36
|
+
│ └── java/
|
|
37
|
+
│ └── com/example/mcp/
|
|
38
|
+
│ └── McpServerTest.java
|
|
39
|
+
└── README.md
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Maven pom.xml Template
|
|
43
|
+
|
|
44
|
+
```xml
|
|
45
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
46
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
47
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
48
|
+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
|
49
|
+
http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
50
|
+
<modelVersion>4.0.0</modelVersion>
|
|
51
|
+
|
|
52
|
+
<groupId>com.example</groupId>
|
|
53
|
+
<artifactId>my-mcp-server</artifactId>
|
|
54
|
+
<version>1.0.0</version>
|
|
55
|
+
<packaging>jar</packaging>
|
|
56
|
+
|
|
57
|
+
<name>My MCP Server</name>
|
|
58
|
+
<description>Model Context Protocol server implementation</description>
|
|
59
|
+
|
|
60
|
+
<properties>
|
|
61
|
+
<java.version>17</java.version>
|
|
62
|
+
<maven.compiler.source>17</maven.compiler.source>
|
|
63
|
+
<maven.compiler.target>17</maven.compiler.target>
|
|
64
|
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
65
|
+
<mcp.version>0.14.1</mcp.version>
|
|
66
|
+
<slf4j.version>2.0.9</slf4j.version>
|
|
67
|
+
<logback.version>1.4.11</logback.version>
|
|
68
|
+
<junit.version>5.10.0</junit.version>
|
|
69
|
+
</properties>
|
|
70
|
+
|
|
71
|
+
<dependencies>
|
|
72
|
+
<!-- MCP Java SDK -->
|
|
73
|
+
<dependency>
|
|
74
|
+
<groupId>io.modelcontextprotocol.sdk</groupId>
|
|
75
|
+
<artifactId>mcp</artifactId>
|
|
76
|
+
<version>${mcp.version}</version>
|
|
77
|
+
</dependency>
|
|
78
|
+
|
|
79
|
+
<!-- Logging -->
|
|
80
|
+
<dependency>
|
|
81
|
+
<groupId>org.slf4j</groupId>
|
|
82
|
+
<artifactId>slf4j-api</artifactId>
|
|
83
|
+
<version>${slf4j.version}</version>
|
|
84
|
+
</dependency>
|
|
85
|
+
<dependency>
|
|
86
|
+
<groupId>ch.qos.logback</groupId>
|
|
87
|
+
<artifactId>logback-classic</artifactId>
|
|
88
|
+
<version>${logback.version}</version>
|
|
89
|
+
</dependency>
|
|
90
|
+
|
|
91
|
+
<!-- Testing -->
|
|
92
|
+
<dependency>
|
|
93
|
+
<groupId>org.junit.jupiter</groupId>
|
|
94
|
+
<artifactId>junit-jupiter</artifactId>
|
|
95
|
+
<version>${junit.version}</version>
|
|
96
|
+
<scope>test</scope>
|
|
97
|
+
</dependency>
|
|
98
|
+
<dependency>
|
|
99
|
+
<groupId>io.projectreactor</groupId>
|
|
100
|
+
<artifactId>reactor-test</artifactId>
|
|
101
|
+
<scope>test</scope>
|
|
102
|
+
</dependency>
|
|
103
|
+
</dependencies>
|
|
104
|
+
|
|
105
|
+
<build>
|
|
106
|
+
<plugins>
|
|
107
|
+
<plugin>
|
|
108
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
109
|
+
<artifactId>maven-compiler-plugin</artifactId>
|
|
110
|
+
<version>3.11.0</version>
|
|
111
|
+
</plugin>
|
|
112
|
+
<plugin>
|
|
113
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
114
|
+
<artifactId>maven-surefire-plugin</artifactId>
|
|
115
|
+
<version>3.1.2</version>
|
|
116
|
+
</plugin>
|
|
117
|
+
<plugin>
|
|
118
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
119
|
+
<artifactId>maven-shade-plugin</artifactId>
|
|
120
|
+
<version>3.5.0</version>
|
|
121
|
+
<executions>
|
|
122
|
+
<execution>
|
|
123
|
+
<phase>package</phase>
|
|
124
|
+
<goals>
|
|
125
|
+
<goal>shade</goal>
|
|
126
|
+
</goals>
|
|
127
|
+
<configuration>
|
|
128
|
+
<transformers>
|
|
129
|
+
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
|
130
|
+
<mainClass>com.example.mcp.McpServerApplication</mainClass>
|
|
131
|
+
</transformer>
|
|
132
|
+
</transformers>
|
|
133
|
+
</configuration>
|
|
134
|
+
</execution>
|
|
135
|
+
</executions>
|
|
136
|
+
</plugin>
|
|
137
|
+
</plugins>
|
|
138
|
+
</build>
|
|
139
|
+
</project>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Gradle build.gradle.kts Template
|
|
143
|
+
|
|
144
|
+
```kotlin
|
|
145
|
+
plugins {
|
|
146
|
+
id("java")
|
|
147
|
+
id("application")
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
group = "com.example"
|
|
151
|
+
version = "1.0.0"
|
|
152
|
+
|
|
153
|
+
java {
|
|
154
|
+
sourceCompatibility = JavaVersion.VERSION_17
|
|
155
|
+
targetCompatibility = JavaVersion.VERSION_17
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
repositories {
|
|
159
|
+
mavenCentral()
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
dependencies {
|
|
163
|
+
// MCP Java SDK
|
|
164
|
+
implementation("io.modelcontextprotocol.sdk:mcp:0.14.1")
|
|
165
|
+
|
|
166
|
+
// Logging
|
|
167
|
+
implementation("org.slf4j:slf4j-api:2.0.9")
|
|
168
|
+
implementation("ch.qos.logback:logback-classic:1.4.11")
|
|
169
|
+
|
|
170
|
+
// Testing
|
|
171
|
+
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
|
|
172
|
+
testImplementation("io.projectreactor:reactor-test:3.5.0")
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
application {
|
|
176
|
+
mainClass.set("com.example.mcp.McpServerApplication")
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
tasks.test {
|
|
180
|
+
useJUnitPlatform()
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## McpServerApplication.java Template
|
|
185
|
+
|
|
186
|
+
```java
|
|
187
|
+
package com.example.mcp;
|
|
188
|
+
|
|
189
|
+
import com.example.mcp.tools.ToolHandlers;
|
|
190
|
+
import com.example.mcp.resources.ResourceHandlers;
|
|
191
|
+
import com.example.mcp.prompts.PromptHandlers;
|
|
192
|
+
import io.mcp.server.McpServer;
|
|
193
|
+
import io.mcp.server.McpServerBuilder;
|
|
194
|
+
import io.mcp.server.transport.StdioServerTransport;
|
|
195
|
+
import org.slf4j.Logger;
|
|
196
|
+
import org.slf4j.LoggerFactory;
|
|
197
|
+
import reactor.core.Disposable;
|
|
198
|
+
|
|
199
|
+
public class McpServerApplication {
|
|
200
|
+
|
|
201
|
+
private static final Logger log = LoggerFactory.getLogger(McpServerApplication.class);
|
|
202
|
+
|
|
203
|
+
public static void main(String[] args) {
|
|
204
|
+
log.info("Starting MCP Server...");
|
|
205
|
+
|
|
206
|
+
try {
|
|
207
|
+
McpServer server = createServer();
|
|
208
|
+
StdioServerTransport transport = new StdioServerTransport();
|
|
209
|
+
|
|
210
|
+
// Start server
|
|
211
|
+
Disposable serverDisposable = server.start(transport).subscribe();
|
|
212
|
+
|
|
213
|
+
// Graceful shutdown
|
|
214
|
+
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
|
215
|
+
log.info("Shutting down MCP server");
|
|
216
|
+
serverDisposable.dispose();
|
|
217
|
+
server.stop().block();
|
|
218
|
+
}));
|
|
219
|
+
|
|
220
|
+
log.info("MCP Server started successfully");
|
|
221
|
+
|
|
222
|
+
// Keep running
|
|
223
|
+
Thread.currentThread().join();
|
|
224
|
+
|
|
225
|
+
} catch (Exception e) {
|
|
226
|
+
log.error("Failed to start MCP server", e);
|
|
227
|
+
System.exit(1);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
private static McpServer createServer() {
|
|
232
|
+
McpServer server = McpServerBuilder.builder()
|
|
233
|
+
.serverInfo("my-mcp-server", "1.0.0")
|
|
234
|
+
.capabilities(capabilities -> capabilities
|
|
235
|
+
.tools(true)
|
|
236
|
+
.resources(true)
|
|
237
|
+
.prompts(true))
|
|
238
|
+
.build();
|
|
239
|
+
|
|
240
|
+
// Register handlers
|
|
241
|
+
ToolHandlers.register(server);
|
|
242
|
+
ResourceHandlers.register(server);
|
|
243
|
+
PromptHandlers.register(server);
|
|
244
|
+
|
|
245
|
+
return server;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## ToolDefinitions.java Template
|
|
251
|
+
|
|
252
|
+
```java
|
|
253
|
+
package com.example.mcp.tools;
|
|
254
|
+
|
|
255
|
+
import io.mcp.json.JsonSchema;
|
|
256
|
+
import io.mcp.server.tool.Tool;
|
|
257
|
+
|
|
258
|
+
import java.util.List;
|
|
259
|
+
|
|
260
|
+
public class ToolDefinitions {
|
|
261
|
+
|
|
262
|
+
public static List<Tool> getTools() {
|
|
263
|
+
return List.of(
|
|
264
|
+
createGreetTool(),
|
|
265
|
+
createCalculateTool()
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
private static Tool createGreetTool() {
|
|
270
|
+
return Tool.builder()
|
|
271
|
+
.name("greet")
|
|
272
|
+
.description("Generate a greeting message")
|
|
273
|
+
.inputSchema(JsonSchema.object()
|
|
274
|
+
.property("name", JsonSchema.string()
|
|
275
|
+
.description("Name to greet")
|
|
276
|
+
.required(true)))
|
|
277
|
+
.build();
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
private static Tool createCalculateTool() {
|
|
281
|
+
return Tool.builder()
|
|
282
|
+
.name("calculate")
|
|
283
|
+
.description("Perform mathematical calculations")
|
|
284
|
+
.inputSchema(JsonSchema.object()
|
|
285
|
+
.property("operation", JsonSchema.string()
|
|
286
|
+
.description("Operation to perform")
|
|
287
|
+
.enumValues(List.of("add", "subtract", "multiply", "divide"))
|
|
288
|
+
.required(true))
|
|
289
|
+
.property("a", JsonSchema.number()
|
|
290
|
+
.description("First operand")
|
|
291
|
+
.required(true))
|
|
292
|
+
.property("b", JsonSchema.number()
|
|
293
|
+
.description("Second operand")
|
|
294
|
+
.required(true)))
|
|
295
|
+
.build();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## ToolHandlers.java Template
|
|
301
|
+
|
|
302
|
+
```java
|
|
303
|
+
package com.example.mcp.tools;
|
|
304
|
+
|
|
305
|
+
import com.fasterxml.jackson.databind.JsonNode;
|
|
306
|
+
import io.mcp.server.McpServer;
|
|
307
|
+
import io.mcp.server.tool.ToolResponse;
|
|
308
|
+
import org.slf4j.Logger;
|
|
309
|
+
import org.slf4j.LoggerFactory;
|
|
310
|
+
import reactor.core.publisher.Mono;
|
|
311
|
+
|
|
312
|
+
public class ToolHandlers {
|
|
313
|
+
|
|
314
|
+
private static final Logger log = LoggerFactory.getLogger(ToolHandlers.class);
|
|
315
|
+
|
|
316
|
+
public static void register(McpServer server) {
|
|
317
|
+
// Register tool list handler
|
|
318
|
+
server.addToolListHandler(() -> {
|
|
319
|
+
log.debug("Listing available tools");
|
|
320
|
+
return Mono.just(ToolDefinitions.getTools());
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
// Register greet handler
|
|
324
|
+
server.addToolHandler("greet", ToolHandlers::handleGreet);
|
|
325
|
+
|
|
326
|
+
// Register calculate handler
|
|
327
|
+
server.addToolHandler("calculate", ToolHandlers::handleCalculate);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
private static Mono<ToolResponse> handleGreet(JsonNode arguments) {
|
|
331
|
+
log.info("Greet tool called");
|
|
332
|
+
|
|
333
|
+
if (!arguments.has("name")) {
|
|
334
|
+
return Mono.just(ToolResponse.error()
|
|
335
|
+
.message("Missing 'name' parameter")
|
|
336
|
+
.build());
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
String name = arguments.get("name").asText();
|
|
340
|
+
String greeting = "Hello, " + name + "! Welcome to MCP.";
|
|
341
|
+
|
|
342
|
+
log.debug("Generated greeting for: {}", name);
|
|
343
|
+
|
|
344
|
+
return Mono.just(ToolResponse.success()
|
|
345
|
+
.addTextContent(greeting)
|
|
346
|
+
.build());
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
private static Mono<ToolResponse> handleCalculate(JsonNode arguments) {
|
|
350
|
+
log.info("Calculate tool called");
|
|
351
|
+
|
|
352
|
+
if (!arguments.has("operation") || !arguments.has("a") || !arguments.has("b")) {
|
|
353
|
+
return Mono.just(ToolResponse.error()
|
|
354
|
+
.message("Missing required parameters")
|
|
355
|
+
.build());
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
String operation = arguments.get("operation").asText();
|
|
359
|
+
double a = arguments.get("a").asDouble();
|
|
360
|
+
double b = arguments.get("b").asDouble();
|
|
361
|
+
|
|
362
|
+
double result;
|
|
363
|
+
switch (operation) {
|
|
364
|
+
case "add":
|
|
365
|
+
result = a + b;
|
|
366
|
+
break;
|
|
367
|
+
case "subtract":
|
|
368
|
+
result = a - b;
|
|
369
|
+
break;
|
|
370
|
+
case "multiply":
|
|
371
|
+
result = a * b;
|
|
372
|
+
break;
|
|
373
|
+
case "divide":
|
|
374
|
+
if (b == 0) {
|
|
375
|
+
return Mono.just(ToolResponse.error()
|
|
376
|
+
.message("Division by zero")
|
|
377
|
+
.build());
|
|
378
|
+
}
|
|
379
|
+
result = a / b;
|
|
380
|
+
break;
|
|
381
|
+
default:
|
|
382
|
+
return Mono.just(ToolResponse.error()
|
|
383
|
+
.message("Unknown operation: " + operation)
|
|
384
|
+
.build());
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
log.debug("Calculation: {} {} {} = {}", a, operation, b, result);
|
|
388
|
+
|
|
389
|
+
return Mono.just(ToolResponse.success()
|
|
390
|
+
.addTextContent("Result: " + result)
|
|
391
|
+
.build());
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
## ResourceDefinitions.java Template
|
|
397
|
+
|
|
398
|
+
```java
|
|
399
|
+
package com.example.mcp.resources;
|
|
400
|
+
|
|
401
|
+
import io.mcp.server.resource.Resource;
|
|
402
|
+
|
|
403
|
+
import java.util.List;
|
|
404
|
+
|
|
405
|
+
public class ResourceDefinitions {
|
|
406
|
+
|
|
407
|
+
public static List<Resource> getResources() {
|
|
408
|
+
return List.of(
|
|
409
|
+
Resource.builder()
|
|
410
|
+
.name("Example Data")
|
|
411
|
+
.uri("resource://data/example")
|
|
412
|
+
.description("Example resource data")
|
|
413
|
+
.mimeType("application/json")
|
|
414
|
+
.build(),
|
|
415
|
+
Resource.builder()
|
|
416
|
+
.name("Configuration")
|
|
417
|
+
.uri("resource://config")
|
|
418
|
+
.description("Server configuration")
|
|
419
|
+
.mimeType("application/json")
|
|
420
|
+
.build()
|
|
421
|
+
);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
## ResourceHandlers.java Template
|
|
427
|
+
|
|
428
|
+
```java
|
|
429
|
+
package com.example.mcp.resources;
|
|
430
|
+
|
|
431
|
+
import io.mcp.server.McpServer;
|
|
432
|
+
import io.mcp.server.resource.ResourceContent;
|
|
433
|
+
import org.slf4j.Logger;
|
|
434
|
+
import org.slf4j.LoggerFactory;
|
|
435
|
+
import reactor.core.publisher.Mono;
|
|
436
|
+
|
|
437
|
+
import java.time.Instant;
|
|
438
|
+
import java.util.Map;
|
|
439
|
+
import java.util.concurrent.ConcurrentHashMap;
|
|
440
|
+
|
|
441
|
+
public class ResourceHandlers {
|
|
442
|
+
|
|
443
|
+
private static final Logger log = LoggerFactory.getLogger(ResourceHandlers.class);
|
|
444
|
+
private static final Map<String, Boolean> subscriptions = new ConcurrentHashMap<>();
|
|
445
|
+
|
|
446
|
+
public static void register(McpServer server) {
|
|
447
|
+
// Register resource list handler
|
|
448
|
+
server.addResourceListHandler(() -> {
|
|
449
|
+
log.debug("Listing available resources");
|
|
450
|
+
return Mono.just(ResourceDefinitions.getResources());
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
// Register resource read handler
|
|
454
|
+
server.addResourceReadHandler(ResourceHandlers::handleRead);
|
|
455
|
+
|
|
456
|
+
// Register resource subscribe handler
|
|
457
|
+
server.addResourceSubscribeHandler(ResourceHandlers::handleSubscribe);
|
|
458
|
+
|
|
459
|
+
// Register resource unsubscribe handler
|
|
460
|
+
server.addResourceUnsubscribeHandler(ResourceHandlers::handleUnsubscribe);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
private static Mono<ResourceContent> handleRead(String uri) {
|
|
464
|
+
log.info("Reading resource: {}", uri);
|
|
465
|
+
|
|
466
|
+
switch (uri) {
|
|
467
|
+
case "resource://data/example":
|
|
468
|
+
String jsonData = String.format(
|
|
469
|
+
"{\"message\":\"Example resource data\",\"timestamp\":\"%s\"}",
|
|
470
|
+
Instant.now()
|
|
471
|
+
);
|
|
472
|
+
return Mono.just(ResourceContent.text(jsonData, uri, "application/json"));
|
|
473
|
+
|
|
474
|
+
case "resource://config":
|
|
475
|
+
String config = "{\"serverName\":\"my-mcp-server\",\"version\":\"1.0.0\"}";
|
|
476
|
+
return Mono.just(ResourceContent.text(config, uri, "application/json"));
|
|
477
|
+
|
|
478
|
+
default:
|
|
479
|
+
log.warn("Unknown resource requested: {}", uri);
|
|
480
|
+
return Mono.error(new IllegalArgumentException("Unknown resource URI: " + uri));
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
private static Mono<Void> handleSubscribe(String uri) {
|
|
485
|
+
log.info("Client subscribed to resource: {}", uri);
|
|
486
|
+
subscriptions.put(uri, true);
|
|
487
|
+
return Mono.empty();
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
private static Mono<Void> handleUnsubscribe(String uri) {
|
|
491
|
+
log.info("Client unsubscribed from resource: {}", uri);
|
|
492
|
+
subscriptions.remove(uri);
|
|
493
|
+
return Mono.empty();
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
## PromptDefinitions.java Template
|
|
499
|
+
|
|
500
|
+
```java
|
|
501
|
+
package com.example.mcp.prompts;
|
|
502
|
+
|
|
503
|
+
import io.mcp.server.prompt.Prompt;
|
|
504
|
+
import io.mcp.server.prompt.PromptArgument;
|
|
505
|
+
|
|
506
|
+
import java.util.List;
|
|
507
|
+
|
|
508
|
+
public class PromptDefinitions {
|
|
509
|
+
|
|
510
|
+
public static List<Prompt> getPrompts() {
|
|
511
|
+
return List.of(
|
|
512
|
+
Prompt.builder()
|
|
513
|
+
.name("code-review")
|
|
514
|
+
.description("Generate a code review prompt")
|
|
515
|
+
.argument(PromptArgument.builder()
|
|
516
|
+
.name("language")
|
|
517
|
+
.description("Programming language")
|
|
518
|
+
.required(true)
|
|
519
|
+
.build())
|
|
520
|
+
.argument(PromptArgument.builder()
|
|
521
|
+
.name("focus")
|
|
522
|
+
.description("Review focus area")
|
|
523
|
+
.required(false)
|
|
524
|
+
.build())
|
|
525
|
+
.build()
|
|
526
|
+
);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
## PromptHandlers.java Template
|
|
532
|
+
|
|
533
|
+
```java
|
|
534
|
+
package com.example.mcp.prompts;
|
|
535
|
+
|
|
536
|
+
import io.mcp.server.McpServer;
|
|
537
|
+
import io.mcp.server.prompt.PromptMessage;
|
|
538
|
+
import io.mcp.server.prompt.PromptResult;
|
|
539
|
+
import org.slf4j.Logger;
|
|
540
|
+
import org.slf4j.LoggerFactory;
|
|
541
|
+
import reactor.core.publisher.Mono;
|
|
542
|
+
|
|
543
|
+
import java.util.List;
|
|
544
|
+
import java.util.Map;
|
|
545
|
+
|
|
546
|
+
public class PromptHandlers {
|
|
547
|
+
|
|
548
|
+
private static final Logger log = LoggerFactory.getLogger(PromptHandlers.class);
|
|
549
|
+
|
|
550
|
+
public static void register(McpServer server) {
|
|
551
|
+
// Register prompt list handler
|
|
552
|
+
server.addPromptListHandler(() -> {
|
|
553
|
+
log.debug("Listing available prompts");
|
|
554
|
+
return Mono.just(PromptDefinitions.getPrompts());
|
|
555
|
+
});
|
|
556
|
+
|
|
557
|
+
// Register prompt get handler
|
|
558
|
+
server.addPromptGetHandler(PromptHandlers::handleCodeReview);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
private static Mono<PromptResult> handleCodeReview(String name, Map<String, String> arguments) {
|
|
562
|
+
log.info("Getting prompt: {}", name);
|
|
563
|
+
|
|
564
|
+
if (!name.equals("code-review")) {
|
|
565
|
+
return Mono.error(new IllegalArgumentException("Unknown prompt: " + name));
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
String language = arguments.getOrDefault("language", "Java");
|
|
569
|
+
String focus = arguments.getOrDefault("focus", "general quality");
|
|
570
|
+
|
|
571
|
+
String description = "Code review for " + language + " with focus on " + focus;
|
|
572
|
+
|
|
573
|
+
List<PromptMessage> messages = List.of(
|
|
574
|
+
PromptMessage.user("Please review this " + language + " code with focus on " + focus + "."),
|
|
575
|
+
PromptMessage.assistant("I'll review the code focusing on " + focus + ". Please share the code."),
|
|
576
|
+
PromptMessage.user("Here's the code to review: [paste code here]")
|
|
577
|
+
);
|
|
578
|
+
|
|
579
|
+
log.debug("Generated code review prompt for {} ({})", language, focus);
|
|
580
|
+
|
|
581
|
+
return Mono.just(PromptResult.builder()
|
|
582
|
+
.description(description)
|
|
583
|
+
.messages(messages)
|
|
584
|
+
.build());
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
## McpServerTest.java Template
|
|
590
|
+
|
|
591
|
+
```java
|
|
592
|
+
package com.example.mcp;
|
|
593
|
+
|
|
594
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
595
|
+
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
596
|
+
import io.mcp.server.McpServer;
|
|
597
|
+
import io.mcp.server.McpSyncServer;
|
|
598
|
+
import io.mcp.server.tool.ToolResponse;
|
|
599
|
+
import org.junit.jupiter.api.BeforeEach;
|
|
600
|
+
import org.junit.jupiter.api.Test;
|
|
601
|
+
|
|
602
|
+
import static org.junit.jupiter.api.Assertions.*;
|
|
603
|
+
|
|
604
|
+
class McpServerTest {
|
|
605
|
+
|
|
606
|
+
private McpSyncServer syncServer;
|
|
607
|
+
private ObjectMapper objectMapper;
|
|
608
|
+
|
|
609
|
+
@BeforeEach
|
|
610
|
+
void setUp() {
|
|
611
|
+
McpServer server = createTestServer();
|
|
612
|
+
syncServer = server.toSyncServer();
|
|
613
|
+
objectMapper = new ObjectMapper();
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
private McpServer createTestServer() {
|
|
617
|
+
// Same setup as main application
|
|
618
|
+
McpServer server = McpServerBuilder.builder()
|
|
619
|
+
.serverInfo("test-server", "1.0.0")
|
|
620
|
+
.capabilities(cap -> cap.tools(true))
|
|
621
|
+
.build();
|
|
622
|
+
|
|
623
|
+
// Register handlers
|
|
624
|
+
ToolHandlers.register(server);
|
|
625
|
+
|
|
626
|
+
return server;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
@Test
|
|
630
|
+
void testGreetTool() {
|
|
631
|
+
ObjectNode args = objectMapper.createObjectNode();
|
|
632
|
+
args.put("name", "Java");
|
|
633
|
+
|
|
634
|
+
ToolResponse response = syncServer.callTool("greet", args);
|
|
635
|
+
|
|
636
|
+
assertFalse(response.isError());
|
|
637
|
+
assertEquals(1, response.getContent().size());
|
|
638
|
+
assertTrue(response.getContent().get(0).getText().contains("Java"));
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
@Test
|
|
642
|
+
void testCalculateTool() {
|
|
643
|
+
ObjectNode args = objectMapper.createObjectNode();
|
|
644
|
+
args.put("operation", "add");
|
|
645
|
+
args.put("a", 5);
|
|
646
|
+
args.put("b", 3);
|
|
647
|
+
|
|
648
|
+
ToolResponse response = syncServer.callTool("calculate", args);
|
|
649
|
+
|
|
650
|
+
assertFalse(response.isError());
|
|
651
|
+
assertTrue(response.getContent().get(0).getText().contains("8"));
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
@Test
|
|
655
|
+
void testDivideByZero() {
|
|
656
|
+
ObjectNode args = objectMapper.createObjectNode();
|
|
657
|
+
args.put("operation", "divide");
|
|
658
|
+
args.put("a", 10);
|
|
659
|
+
args.put("b", 0);
|
|
660
|
+
|
|
661
|
+
ToolResponse response = syncServer.callTool("calculate", args);
|
|
662
|
+
|
|
663
|
+
assertTrue(response.isError());
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
## README.md Template
|
|
669
|
+
|
|
670
|
+
```markdown
|
|
671
|
+
# My MCP Server
|
|
672
|
+
|
|
673
|
+
A Model Context Protocol server built with Java and the official MCP Java SDK.
|
|
674
|
+
|
|
675
|
+
## Features
|
|
676
|
+
|
|
677
|
+
- ✅ Tools: greet, calculate
|
|
678
|
+
- ✅ Resources: example data, configuration
|
|
679
|
+
- ✅ Prompts: code-review
|
|
680
|
+
- ✅ Reactive Streams with Project Reactor
|
|
681
|
+
- ✅ Structured logging with SLF4J
|
|
682
|
+
- ✅ Full test coverage
|
|
683
|
+
|
|
684
|
+
## Requirements
|
|
685
|
+
|
|
686
|
+
- Java 17 or later
|
|
687
|
+
- Maven 3.6+ or Gradle 7+
|
|
688
|
+
|
|
689
|
+
## Build
|
|
690
|
+
|
|
691
|
+
### Maven
|
|
692
|
+
```bash
|
|
693
|
+
mvn clean package
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
### Gradle
|
|
697
|
+
```bash
|
|
698
|
+
./gradlew build
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
## Run
|
|
702
|
+
|
|
703
|
+
### Maven
|
|
704
|
+
```bash
|
|
705
|
+
java -jar target/my-mcp-server-1.0.0.jar
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
### Gradle
|
|
709
|
+
```bash
|
|
710
|
+
./gradlew run
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
## Testing
|
|
714
|
+
|
|
715
|
+
### Maven
|
|
716
|
+
```bash
|
|
717
|
+
mvn test
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
### Gradle
|
|
721
|
+
```bash
|
|
722
|
+
./gradlew test
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
## Integration with Claude Desktop
|
|
726
|
+
|
|
727
|
+
Add to `claude_desktop_config.json`:
|
|
728
|
+
|
|
729
|
+
```json
|
|
730
|
+
{
|
|
731
|
+
"mcpServers": {
|
|
732
|
+
"my-mcp-server": {
|
|
733
|
+
"command": "java",
|
|
734
|
+
"args": ["-jar", "/path/to/my-mcp-server-1.0.0.jar"]
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
## License
|
|
741
|
+
|
|
742
|
+
MIT
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
## Generation Instructions
|
|
746
|
+
|
|
747
|
+
1. **Ask for project name and package**
|
|
748
|
+
2. **Choose build tool** (Maven or Gradle)
|
|
749
|
+
3. **Generate all files** with proper package structure
|
|
750
|
+
4. **Use Reactive Streams** for async handlers
|
|
751
|
+
5. **Include comprehensive logging** with SLF4J
|
|
752
|
+
6. **Add tests** for all handlers
|
|
753
|
+
7. **Follow Java conventions** (camelCase, PascalCase)
|
|
754
|
+
8. **Include error handling** with proper responses
|
|
755
|
+
9. **Document public APIs** with Javadoc
|
|
756
|
+
10. **Provide both sync and async** examples
|