@dewtech/dare-cli 3.3.0 → 3.4.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/LICENSE +21 -0
- package/README.md +764 -764
- package/dist/__tests__/confidence.test.js +13 -13
- package/dist/__tests__/dag-converter.test.js +56 -56
- package/dist/__tests__/mcp-server/server.test.js +3 -16
- package/dist/__tests__/mcp-server/server.test.js.map +1 -1
- package/dist/__tests__/project-generator.test.js +2 -2
- package/dist/__tests__/project-generator.test.js.map +1 -1
- package/dist/__tests__/refine.test.js +49 -49
- package/dist/__tests__/reverse-collection.test.js +6 -6
- package/dist/__tests__/review.test.js +38 -38
- package/dist/__tests__/security-hardening.test.d.ts +2 -0
- package/dist/__tests__/security-hardening.test.d.ts.map +1 -0
- package/dist/__tests__/security-hardening.test.js +101 -0
- package/dist/__tests__/security-hardening.test.js.map +1 -0
- package/dist/__tests__/validate.test.js +65 -65
- package/dist/bin/dare.js +0 -0
- package/dist/commands/__tests__/init-validation.test.d.ts +2 -0
- package/dist/commands/__tests__/init-validation.test.d.ts.map +1 -0
- package/dist/commands/__tests__/init-validation.test.js +81 -0
- package/dist/commands/__tests__/init-validation.test.js.map +1 -0
- package/dist/commands/__tests__/init.integration.spec.js +6 -4
- package/dist/commands/__tests__/init.integration.spec.js.map +1 -1
- package/dist/commands/__tests__/init.spec.d.ts +2 -0
- package/dist/commands/__tests__/init.spec.d.ts.map +1 -0
- package/dist/commands/__tests__/init.spec.js +88 -0
- package/dist/commands/__tests__/init.spec.js.map +1 -0
- package/dist/commands/blueprint.js +122 -122
- package/dist/commands/design.js +20 -20
- package/dist/commands/init-validation.d.ts +22 -0
- package/dist/commands/init-validation.d.ts.map +1 -0
- package/dist/commands/init-validation.js +54 -0
- package/dist/commands/init-validation.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +26 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/graphrag/graph-rag.js +24 -24
- package/dist/mcp-server/__tests__/auth.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/auth.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/auth.test.js +72 -0
- package/dist/mcp-server/__tests__/auth.test.js.map +1 -0
- package/dist/mcp-server/__tests__/boot-config.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/boot-config.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/boot-config.test.js +29 -0
- package/dist/mcp-server/__tests__/boot-config.test.js.map +1 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.js +66 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.js.map +1 -0
- package/dist/mcp-server/__tests__/path-confinement.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/path-confinement.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/path-confinement.test.js +135 -0
- package/dist/mcp-server/__tests__/path-confinement.test.js.map +1 -0
- package/dist/mcp-server/bin/server.js +18 -6
- package/dist/mcp-server/bin/server.js.map +1 -1
- package/dist/mcp-server/boot-config.d.ts +6 -0
- package/dist/mcp-server/boot-config.d.ts.map +1 -0
- package/dist/mcp-server/boot-config.js +17 -0
- package/dist/mcp-server/boot-config.js.map +1 -0
- package/dist/mcp-server/middleware/auth.d.ts +10 -0
- package/dist/mcp-server/middleware/auth.d.ts.map +1 -0
- package/dist/mcp-server/middleware/auth.js +44 -0
- package/dist/mcp-server/middleware/auth.js.map +1 -0
- package/dist/mcp-server/middleware/cors.d.ts +6 -0
- package/dist/mcp-server/middleware/cors.d.ts.map +1 -0
- package/dist/mcp-server/middleware/cors.js +30 -0
- package/dist/mcp-server/middleware/cors.js.map +1 -0
- package/dist/mcp-server/middleware/error-handler.d.ts +11 -0
- package/dist/mcp-server/middleware/error-handler.d.ts.map +1 -0
- package/dist/mcp-server/middleware/error-handler.js +14 -0
- package/dist/mcp-server/middleware/error-handler.js.map +1 -0
- package/dist/mcp-server/server.d.ts +7 -2
- package/dist/mcp-server/server.d.ts.map +1 -1
- package/dist/mcp-server/server.js +185 -105
- package/dist/mcp-server/server.js.map +1 -1
- package/dist/skills/registry-mock.json +109 -109
- package/dist/skills/tests/manifest.spec.js +20 -20
- package/dist/stacks/__tests__/dna-emitter.spec.js +6 -6
- package/dist/stacks/dna-emitter.js +69 -69
- package/dist/stacks/ruby-rails-8/scaffold.js +15 -15
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +254 -252
- package/dist/utils/project-generator.js.map +1 -1
- package/dist/utils/stack-bootstrap.js +371 -371
- package/dist/utils/templates.js +394 -394
- package/dist/verification/__tests__/anti-tamper.test.js +13 -13
- package/package.json +96 -93
- package/templates/DARE-dag-example.yaml +280 -280
- package/templates/UPDATE-MANIFEST.json +68 -68
- package/templates/backend/node-nestjs/.env.example +9 -9
- package/templates/backend/node-nestjs/nest-cli.json +8 -8
- package/templates/backend/node-nestjs/package.json +50 -50
- package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
- package/templates/backend/node-nestjs/src/app.module.ts +15 -15
- package/templates/backend/node-nestjs/src/app.service.ts +8 -8
- package/templates/backend/node-nestjs/src/main.ts +24 -24
- package/templates/backend/node-nestjs/tsconfig.json +21 -21
- package/templates/backend/php-laravel/.env.example +22 -22
- package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
- package/templates/backend/php-laravel/composer.json +40 -40
- package/templates/backend/python-fastapi/.env.example +4 -4
- package/templates/backend/python-fastapi/app/api/router.py +8 -8
- package/templates/backend/python-fastapi/app/core/config.py +20 -20
- package/templates/backend/python-fastapi/main.py +35 -35
- package/templates/backend/python-fastapi/requirements.txt +13 -13
- package/templates/backend/rust-axum/.env.example +3 -3
- package/templates/backend/rust-axum/Cargo.toml +23 -23
- package/templates/backend/rust-axum/src/errors.rs +30 -30
- package/templates/backend/rust-axum/src/main.rs +32 -32
- package/templates/backend/rust-axum/src/routes.rs +6 -6
- package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
- package/templates/frontend/leptos-csr/Cargo.toml +16 -16
- package/templates/frontend/leptos-csr/Trunk.toml +10 -10
- package/templates/frontend/leptos-csr/index.html +11 -11
- package/templates/frontend/leptos-csr/src/lib.rs +20 -20
- package/templates/frontend/leptos-csr/style/main.scss +19 -19
- package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
- package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
- package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
- package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
- package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
- package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
- package/templates/frontend/react/index.html +12 -12
- package/templates/frontend/react/package.json +35 -35
- package/templates/frontend/react/src/App.tsx +25 -25
- package/templates/frontend/react/src/main.tsx +9 -9
- package/templates/frontend/vue/package.json +32 -32
- package/templates/frontend/vue/src/App.vue +7 -7
- package/templates/frontend/vue/src/main.ts +10 -10
- package/templates/frontend/vue/src/router/index.ts +14 -14
- package/templates/frontend/vue/src/views/HomeView.vue +6 -6
- package/templates/hooks/pre-commit-dare-validate +24 -24
- package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -152
- package/templates/ide/antigravity/.agents/skills/dare-bench/SKILL.md +21 -21
- package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +368 -368
- package/templates/ide/antigravity/.agents/skills/dare-bootstrap/SKILL.md +32 -32
- package/templates/ide/antigravity/.agents/skills/dare-bugfix-design/SKILL.md +76 -76
- package/templates/ide/antigravity/.agents/skills/dare-dag/SKILL.md +32 -32
- package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -154
- package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -130
- package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
- package/templates/ide/antigravity/.agents/skills/dare-design/SKILL.md +180 -180
- package/templates/ide/antigravity/.agents/skills/dare-discover/SKILL.md +33 -33
- package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -63
- package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -315
- package/templates/ide/antigravity/.agents/skills/dare-execute/SKILL.md +264 -264
- package/templates/ide/antigravity/.agents/skills/dare-feature-design/SKILL.md +74 -74
- package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -192
- package/templates/ide/antigravity/.agents/skills/dare-graph/SKILL.md +35 -35
- package/templates/ide/antigravity/.agents/skills/dare-info/SKILL.md +31 -31
- package/templates/ide/antigravity/.agents/skills/dare-init/SKILL.md +35 -35
- package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -337
- package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -166
- package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -217
- package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -61
- package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -187
- package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -217
- package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
- package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -108
- package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
- package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -263
- package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
- package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -274
- package/templates/ide/antigravity/.agents/skills/dare-skill/SKILL.md +35 -35
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
- package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -188
- package/templates/ide/antigravity/.agents/skills/dare-update/SKILL.md +33 -33
- package/templates/ide/antigravity/.agents/skills/dare-validate/SKILL.md +33 -33
- package/templates/ide/antigravity/.agents/skills/dare-welcome/SKILL.md +30 -30
- package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -343
- package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -377
- package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -382
- package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -326
- package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -393
- package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
- package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/antigravity/templates/TASKS-template.md +26 -26
- package/templates/ide/antigravity/templates/TELEMETRY-template.md +125 -125
- package/templates/ide/claude/.claude/commands/dare-ax.md +131 -131
- package/templates/ide/claude/.claude/commands/dare-bench.md +18 -18
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
- package/templates/ide/claude/.claude/commands/dare-bootstrap.md +27 -27
- package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -119
- package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
- package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
- package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -117
- package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
- package/templates/ide/claude/.claude/commands/dare-dag.md +27 -27
- package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
- package/templates/ide/claude/.claude/commands/dare-discover.md +28 -28
- package/templates/ide/claude/.claude/commands/dare-dna.md +75 -75
- package/templates/ide/claude/.claude/commands/dare-docker.md +207 -207
- package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
- package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -147
- package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -149
- package/templates/ide/claude/.claude/commands/dare-graph.md +30 -30
- package/templates/ide/claude/.claude/commands/dare-info.md +26 -26
- package/templates/ide/claude/.claude/commands/dare-init.md +30 -30
- package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -211
- package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -124
- package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -148
- package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -72
- package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -166
- package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -159
- package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
- package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -139
- package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
- package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
- package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
- package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
- package/templates/ide/claude/.claude/commands/dare-skill.md +30 -30
- package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
- package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -132
- package/templates/ide/claude/.claude/commands/dare-update.md +28 -28
- package/templates/ide/claude/.claude/commands/dare-validate.md +28 -28
- package/templates/ide/claude/.claude/commands/dare-welcome.md +25 -25
- package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -205
- package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -232
- package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -228
- package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -210
- package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -236
- package/templates/ide/claude/.claude/settings.example.json +35 -35
- package/templates/ide/claude/CLAUDE.md +146 -146
- package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/claude/templates/DESIGN-template.md +129 -129
- package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/claude/templates/TASKS-template.md +26 -26
- package/templates/ide/claude/templates/TELEMETRY-template.md +125 -125
- package/templates/ide/cursor/.cursor/commands/dare-bench.md +18 -18
- package/templates/ide/cursor/.cursor/commands/dare-blueprint.md +86 -86
- package/templates/ide/cursor/.cursor/commands/dare-bootstrap.md +27 -27
- package/templates/ide/cursor/.cursor/commands/dare-bugfix-design.md +64 -64
- package/templates/ide/cursor/.cursor/commands/dare-dag-run.md +110 -110
- package/templates/ide/cursor/.cursor/commands/dare-dag-viz.md +139 -139
- package/templates/ide/cursor/.cursor/commands/dare-dag.md +27 -27
- package/templates/ide/cursor/.cursor/commands/dare-design.md +35 -35
- package/templates/ide/cursor/.cursor/commands/dare-discover.md +28 -28
- package/templates/ide/cursor/.cursor/commands/dare-dna.md +75 -75
- package/templates/ide/cursor/.cursor/commands/dare-docker-compose.md +18 -18
- package/templates/ide/cursor/.cursor/commands/dare-dockerfile.md +17 -17
- package/templates/ide/cursor/.cursor/commands/dare-execute.md +19 -19
- package/templates/ide/cursor/.cursor/commands/dare-feature-design.md +64 -64
- package/templates/ide/cursor/.cursor/commands/dare-graph.md +30 -30
- package/templates/ide/cursor/.cursor/commands/dare-info.md +26 -26
- package/templates/ide/cursor/.cursor/commands/dare-init.md +30 -30
- package/templates/ide/cursor/.cursor/commands/dare-migrate.md +72 -72
- package/templates/ide/cursor/.cursor/commands/dare-refine.md +107 -107
- package/templates/ide/cursor/.cursor/commands/dare-reverse.md +139 -139
- package/templates/ide/cursor/.cursor/commands/dare-review.md +91 -91
- package/templates/ide/cursor/.cursor/commands/dare-skill.md +30 -30
- package/templates/ide/cursor/.cursor/commands/dare-tasks.md +184 -184
- package/templates/ide/cursor/.cursor/commands/dare-telemetry.md +42 -42
- package/templates/ide/cursor/.cursor/commands/dare-update.md +28 -28
- package/templates/ide/cursor/.cursor/commands/dare-validate.md +28 -28
- package/templates/ide/cursor/.cursor/commands/dare-welcome.md +25 -25
- package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -263
- package/templates/ide/cursor/.cursor/rules/skill-bugfix-design.mdc +51 -51
- package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -173
- package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -134
- package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
- package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -63
- package/templates/ide/cursor/.cursor/rules/skill-docker.mdc +33 -33
- package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -352
- package/templates/ide/cursor/.cursor/rules/skill-feature-design.mdc +43 -43
- package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -244
- package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -371
- package/templates/ide/cursor/.cursor/rules/skill-laravel-api.mdc +44 -44
- package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -266
- package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -295
- package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -367
- package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -58
- package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -346
- package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -248
- package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -400
- package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -262
- package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -107
- package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -281
- package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
- package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
- package/templates/ide/cursor/.cursor/rules/skill-telemetry.mdc +156 -156
- package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
- package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/cursor/templates/TASKS-template.md +26 -26
- package/templates/ide/cursor/templates/TELEMETRY-template.md +125 -125
- package/templates/shared/docker-compose.yml +41 -41
- package/templates/stacks/go-gin/.dare/skills.yml +11 -11
- package/templates/stacks/go-gin/.env.example +24 -24
- package/templates/stacks/go-gin/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/go-gin/README.md.tpl +38 -38
- package/templates/stacks/go-gin/cmd/server/main.go.tpl +78 -78
- package/templates/stacks/go-gin/db/migrations/0001_create_users.down.sql +2 -2
- package/templates/stacks/go-gin/db/migrations/0001_create_users.up.sql +12 -12
- package/templates/stacks/go-gin/db/queries/users.sql +23 -23
- package/templates/stacks/go-gin/gitignore +7 -7
- package/templates/stacks/go-gin/go.mod.tpl +17 -17
- package/templates/stacks/go-gin/internal/config/config.go +41 -41
- package/templates/stacks/go-gin/internal/db/postgres.go.tpl +25 -25
- package/templates/stacks/go-gin/internal/handler/auth_handler.go.tpl +72 -72
- package/templates/stacks/go-gin/internal/handler/users_handler.go.tpl +72 -72
- package/templates/stacks/go-gin/internal/handler/ws_handler.go +37 -37
- package/templates/stacks/go-gin/internal/llm/dummy.go +14 -14
- package/templates/stacks/go-gin/internal/llm/provider.go +8 -8
- package/templates/stacks/go-gin/internal/middleware/jwt.go.tpl +58 -58
- package/templates/stacks/go-gin/internal/middleware/rate_limit.go +55 -55
- package/templates/stacks/go-gin/internal/model/user.go +17 -17
- package/templates/stacks/go-gin/internal/repository/users_repository.go.tpl +79 -79
- package/templates/stacks/go-gin/internal/service/auth_service.go.tpl +55 -55
- package/templates/stacks/go-gin/internal/service/users_service.go.tpl +53 -53
- package/templates/stacks/go-gin/llms.txt.tpl +54 -54
- package/templates/stacks/go-gin/openapi.json.tpl +46 -46
- package/templates/stacks/go-gin/sqlc.yaml +14 -14
- package/templates/stacks/go-gin/tests/smoke_test.go.tpl +22 -22
- package/templates/stacks/go-stdlib/.dare/skills.yml +11 -11
- package/templates/stacks/go-stdlib/.env.example +24 -24
- package/templates/stacks/go-stdlib/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/go-stdlib/README.md.tpl +41 -41
- package/templates/stacks/go-stdlib/cmd/server/main.go.tpl +82 -82
- package/templates/stacks/go-stdlib/db/migrations/0001_create_users.down.sql +2 -2
- package/templates/stacks/go-stdlib/db/migrations/0001_create_users.up.sql +12 -12
- package/templates/stacks/go-stdlib/db/queries/users.sql +23 -23
- package/templates/stacks/go-stdlib/gitignore +6 -6
- package/templates/stacks/go-stdlib/go.mod.tpl +15 -15
- package/templates/stacks/go-stdlib/internal/config/config.go +41 -41
- package/templates/stacks/go-stdlib/internal/db/postgres.go.tpl +24 -24
- package/templates/stacks/go-stdlib/internal/handler/auth_handler.go.tpl +71 -71
- package/templates/stacks/go-stdlib/internal/handler/users_handler.go.tpl +84 -84
- package/templates/stacks/go-stdlib/internal/handler/ws_handler.go +36 -36
- package/templates/stacks/go-stdlib/internal/httpx/json.go +32 -32
- package/templates/stacks/go-stdlib/internal/llm/dummy.go +14 -14
- package/templates/stacks/go-stdlib/internal/llm/provider.go +8 -8
- package/templates/stacks/go-stdlib/internal/middleware/chain.go +21 -21
- package/templates/stacks/go-stdlib/internal/middleware/cors.go +27 -27
- package/templates/stacks/go-stdlib/internal/middleware/jwt.go.tpl +51 -51
- package/templates/stacks/go-stdlib/internal/middleware/rate_limit.go +81 -81
- package/templates/stacks/go-stdlib/internal/model/user.go +17 -17
- package/templates/stacks/go-stdlib/internal/repository/users_repository.go.tpl +75 -75
- package/templates/stacks/go-stdlib/internal/service/auth_service.go.tpl +55 -55
- package/templates/stacks/go-stdlib/internal/service/users_service.go.tpl +53 -53
- package/templates/stacks/go-stdlib/llms.txt.tpl +60 -60
- package/templates/stacks/go-stdlib/openapi.json.tpl +46 -46
- package/templates/stacks/go-stdlib/sqlc.yaml +14 -14
- package/templates/stacks/go-stdlib/tests/smoke_test.go.tpl +45 -45
- package/templates/stacks/mcp-go/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-go/.env.example +14 -14
- package/templates/stacks/mcp-go/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/mcp-go/README.md.tpl +50 -50
- package/templates/stacks/mcp-go/cmd/server/main.go.tpl +62 -62
- package/templates/stacks/mcp-go/gitignore +6 -6
- package/templates/stacks/mcp-go/go.mod.tpl +9 -9
- package/templates/stacks/mcp-go/internal/prompts/summarize.go +9 -9
- package/templates/stacks/mcp-go/internal/server/server.go.tpl +80 -80
- package/templates/stacks/mcp-go/internal/tools/echo.go +15 -15
- package/templates/stacks/mcp-go/internal/transports/http.go.tpl +21 -21
- package/templates/stacks/mcp-go/internal/transports/sse.go.tpl +17 -17
- package/templates/stacks/mcp-go/internal/transports/stdio.go.tpl +14 -14
- package/templates/stacks/mcp-go/llms.txt.tpl +60 -60
- package/templates/stacks/mcp-go/openapi.json.tpl +31 -31
- package/templates/stacks/mcp-go/tests/echo_test.go.tpl +37 -37
- package/templates/stacks/mcp-node-ts/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-node-ts/.env.example +16 -16
- package/templates/stacks/mcp-node-ts/.github/workflows/dare-ci.yml +54 -54
- package/templates/stacks/mcp-node-ts/README.md.hbs +49 -49
- package/templates/stacks/mcp-node-ts/gitignore +7 -7
- package/templates/stacks/mcp-node-ts/llms.txt.hbs +61 -61
- package/templates/stacks/mcp-node-ts/openapi.json.hbs +39 -39
- package/templates/stacks/mcp-node-ts/package.json.hbs +35 -35
- package/templates/stacks/mcp-node-ts/src/cli.ts.hbs +71 -71
- package/templates/stacks/mcp-node-ts/src/prompts/index.ts +36 -36
- package/templates/stacks/mcp-node-ts/src/server.ts.hbs +45 -45
- package/templates/stacks/mcp-node-ts/src/tools/echo.ts +23 -23
- package/templates/stacks/mcp-node-ts/src/tools/index.ts +18 -18
- package/templates/stacks/mcp-node-ts/src/transports/http.ts +68 -68
- package/templates/stacks/mcp-node-ts/src/transports/sse.ts +58 -58
- package/templates/stacks/mcp-node-ts/src/transports/stdio.ts +5 -5
- package/templates/stacks/mcp-node-ts/tests/echo.test.ts +50 -50
- package/templates/stacks/mcp-node-ts/tsconfig.json +17 -17
- package/templates/stacks/mcp-python/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-python/.env.example +14 -14
- package/templates/stacks/mcp-python/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/mcp-python/README.md.j2 +49 -49
- package/templates/stacks/mcp-python/gitignore +12 -12
- package/templates/stacks/mcp-python/llms.txt.j2 +56 -56
- package/templates/stacks/mcp-python/openapi.json.j2 +33 -33
- package/templates/stacks/mcp-python/pyproject.toml.j2 +37 -37
- package/templates/stacks/mcp-python/src/cli.py.j2 +68 -68
- package/templates/stacks/mcp-python/src/prompts/summarize.py +10 -10
- package/templates/stacks/mcp-python/src/server.py.j2 +28 -28
- package/templates/stacks/mcp-python/src/tools/echo.py +12 -12
- package/templates/stacks/mcp-python/src/transports/http.py +12 -12
- package/templates/stacks/mcp-python/src/transports/sse.py +13 -13
- package/templates/stacks/mcp-python/src/transports/stdio.py +6 -6
- package/templates/stacks/mcp-python/tests/test_echo.py +28 -28
- package/templates/stacks/mcp-rust/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-rust/.env.example +14 -14
- package/templates/stacks/mcp-rust/.github/workflows/dare-ci.yml +38 -38
- package/templates/stacks/mcp-rust/Cargo.toml.tera +35 -35
- package/templates/stacks/mcp-rust/README.md.tera +50 -50
- package/templates/stacks/mcp-rust/gitignore +5 -5
- package/templates/stacks/mcp-rust/llms.txt.tera +60 -60
- package/templates/stacks/mcp-rust/openapi.json.tera +31 -31
- package/templates/stacks/mcp-rust/src/cli.rs.tera +33 -33
- package/templates/stacks/mcp-rust/src/lib.rs +6 -6
- package/templates/stacks/mcp-rust/src/main.rs.tera +30 -30
- package/templates/stacks/mcp-rust/src/prompts/mod.rs +1 -1
- package/templates/stacks/mcp-rust/src/prompts/summarize.rs +5 -5
- package/templates/stacks/mcp-rust/src/server.rs.tera +38 -38
- package/templates/stacks/mcp-rust/src/tools/echo.rs +18 -18
- package/templates/stacks/mcp-rust/src/tools/mod.rs +22 -22
- package/templates/stacks/mcp-rust/src/transports/http.rs +27 -27
- package/templates/stacks/mcp-rust/src/transports/mod.rs +3 -3
- package/templates/stacks/mcp-rust/src/transports/sse.rs +33 -33
- package/templates/stacks/mcp-rust/src/transports/stdio.rs +14 -14
- package/templates/stacks/mcp-rust/tests/echo_test.rs.tera +27 -27
- package/templates/stacks/node-nestjs/.dare/skills.yml +11 -11
- package/templates/stacks/node-nestjs/.env.example +21 -21
- package/templates/stacks/node-nestjs/.github/workflows/dare-ci.yml +54 -54
- package/templates/stacks/node-nestjs/README.md.hbs +35 -35
- package/templates/stacks/node-nestjs/gitignore +7 -7
- package/templates/stacks/node-nestjs/llms.txt.hbs +47 -47
- package/templates/stacks/node-nestjs/nest-cli.json +16 -16
- package/templates/stacks/node-nestjs/openapi.json.hbs +75 -75
- package/templates/stacks/node-nestjs/package.json.hbs +57 -57
- package/templates/stacks/node-nestjs/prisma/schema.prisma +25 -25
- package/templates/stacks/node-nestjs/prisma/seed.ts.hbs +25 -25
- package/templates/stacks/node-nestjs/src/app.module.ts +39 -39
- package/templates/stacks/node-nestjs/src/auth/auth.controller.ts +29 -29
- package/templates/stacks/node-nestjs/src/auth/auth.module.ts +25 -25
- package/templates/stacks/node-nestjs/src/auth/auth.service.ts +36 -36
- package/templates/stacks/node-nestjs/src/auth/dto/login-response.dto.ts +9 -9
- package/templates/stacks/node-nestjs/src/auth/dto/login.dto.ts +17 -17
- package/templates/stacks/node-nestjs/src/auth/jwt.strategy.ts +25 -25
- package/templates/stacks/node-nestjs/src/common/filters/problem-details.filter.ts +38 -38
- package/templates/stacks/node-nestjs/src/common/interceptors/json-response.interceptor.ts +13 -13
- package/templates/stacks/node-nestjs/src/main.ts.hbs +44 -44
- package/templates/stacks/node-nestjs/src/prisma/prisma.module.ts +9 -9
- package/templates/stacks/node-nestjs/src/prisma/prisma.service.ts +9 -9
- package/templates/stacks/node-nestjs/src/users/dto/create-user.dto.ts +22 -22
- package/templates/stacks/node-nestjs/src/users/dto/user.dto.ts +15 -15
- package/templates/stacks/node-nestjs/src/users/users.controller.ts +41 -41
- package/templates/stacks/node-nestjs/src/users/users.module.ts +11 -11
- package/templates/stacks/node-nestjs/src/users/users.repository.ts +38 -38
- package/templates/stacks/node-nestjs/src/users/users.service.ts +38 -38
- package/templates/stacks/node-nestjs/tsconfig.build.json +4 -4
- package/templates/stacks/node-nestjs/tsconfig.json +28 -28
- package/templates/stacks/php-laravel/.dare/skills.yml +11 -11
- package/templates/stacks/php-laravel/.env.example +41 -41
- package/templates/stacks/php-laravel/.github/workflows/dare-ci.yml +43 -43
- package/templates/stacks/php-laravel/README.md.hbs +36 -36
- package/templates/stacks/php-laravel/app/Http/Controllers/Api/AuthController.php +36 -36
- package/templates/stacks/php-laravel/app/Http/Controllers/Api/UsersController.php +33 -33
- package/templates/stacks/php-laravel/app/Http/Requests/CreateUserRequest.php +26 -26
- package/templates/stacks/php-laravel/app/Http/Requests/LoginRequest.php +34 -34
- package/templates/stacks/php-laravel/app/Llm/Contracts/LlmProvider.php +12 -12
- package/templates/stacks/php-laravel/app/Llm/Providers/DummyProvider.php +13 -13
- package/templates/stacks/php-laravel/app/Llm/Providers/OpenAiProvider.php +33 -33
- package/templates/stacks/php-laravel/app/Models/User.php +44 -44
- package/templates/stacks/php-laravel/app/Repositories/UsersRepository.php +32 -32
- package/templates/stacks/php-laravel/app/Services/AuthService.php +37 -37
- package/templates/stacks/php-laravel/app/Services/UsersService.php +57 -57
- package/templates/stacks/php-laravel/artisan +12 -12
- package/templates/stacks/php-laravel/bootstrap/app.php +29 -29
- package/templates/stacks/php-laravel/bootstrap/providers.php +5 -5
- package/templates/stacks/php-laravel/composer.json.hbs +58 -58
- package/templates/stacks/php-laravel/config/l5-swagger.php +41 -41
- package/templates/stacks/php-laravel/config/reverb.php +34 -34
- package/templates/stacks/php-laravel/config/sanctum.php +15 -15
- package/templates/stacks/php-laravel/database/migrations/2026_06_01_000001_create_users_table.php +27 -27
- package/templates/stacks/php-laravel/database/seeders/DatabaseSeeder.php +21 -21
- package/templates/stacks/php-laravel/gitignore +23 -23
- package/templates/stacks/php-laravel/llms.txt.hbs +53 -53
- package/templates/stacks/php-laravel/openapi.json.hbs +43 -43
- package/templates/stacks/php-laravel/phpstan.neon +9 -9
- package/templates/stacks/php-laravel/routes/api.php +13 -13
- package/templates/stacks/php-laravel/routes/channels.php +7 -7
- package/templates/stacks/php-laravel/tests/Feature/AuthTest.php +35 -35
- package/templates/stacks/php-laravel/tests/Feature/UsersTest.php +30 -30
- package/templates/stacks/php-laravel/tests/Pest.php +5 -5
- package/templates/stacks/python-fastapi/.dare/skills.yml +11 -11
- package/templates/stacks/python-fastapi/.env.example +21 -21
- package/templates/stacks/python-fastapi/.github/workflows/dare-ci.yml +43 -43
- package/templates/stacks/python-fastapi/README.md.j2 +35 -35
- package/templates/stacks/python-fastapi/alembic/env.py +46 -46
- package/templates/stacks/python-fastapi/alembic/script.py.mako +26 -26
- package/templates/stacks/python-fastapi/alembic/versions/0001_create_users.py.j2 +37 -37
- package/templates/stacks/python-fastapi/alembic.ini.j2 +39 -39
- package/templates/stacks/python-fastapi/app/core/config.py +24 -24
- package/templates/stacks/python-fastapi/app/core/security.py +34 -34
- package/templates/stacks/python-fastapi/app/db/session.py +22 -22
- package/templates/stacks/python-fastapi/app/main.py.j2 +36 -36
- package/templates/stacks/python-fastapi/app/models/__init__.py +3 -3
- package/templates/stacks/python-fastapi/app/models/user.py +30 -30
- package/templates/stacks/python-fastapi/app/repositories/user_repository.py +34 -34
- package/templates/stacks/python-fastapi/app/routers/auth.py +37 -37
- package/templates/stacks/python-fastapi/app/routers/users.py +46 -46
- package/templates/stacks/python-fastapi/app/schemas/user.py +56 -56
- package/templates/stacks/python-fastapi/app/services/auth_service.py +22 -22
- package/templates/stacks/python-fastapi/app/services/user_service.py +31 -31
- package/templates/stacks/python-fastapi/gitignore +12 -12
- package/templates/stacks/python-fastapi/llms.txt.j2 +53 -53
- package/templates/stacks/python-fastapi/openapi.json.j2 +43 -43
- package/templates/stacks/python-fastapi/pyproject.toml.j2 +45 -45
- package/templates/stacks/python-fastapi/tests/test_auth.py +22 -22
- package/templates/stacks/ruby-rails-8/.dare/skills.yml +50 -50
- package/templates/stacks/ruby-rails-8/.env.example +20 -20
- package/templates/stacks/ruby-rails-8/.github/workflows/dare-ci.yml +112 -112
- package/templates/stacks/ruby-rails-8/Gemfile.erb +61 -61
- package/templates/stacks/ruby-rails-8/app/channels/application_cable/channel.rb +11 -11
- package/templates/stacks/ruby-rails-8/app/channels/application_cable/connection.rb +34 -34
- package/templates/stacks/ruby-rails-8/app/channels/dare_updates_channel.rb +18 -18
- package/templates/stacks/ruby-rails-8/app/channels/user_updates_channel.rb +23 -23
- package/templates/stacks/ruby-rails-8/app/controllers/application_controller.rb +44 -44
- package/templates/stacks/ruby-rails-8/app/controllers/concerns/problem_details.rb +93 -93
- package/templates/stacks/ruby-rails-8/app/handlers/summarize_handler.rb +33 -33
- package/templates/stacks/ruby-rails-8/app/handlers/users_handler.rb +68 -68
- package/templates/stacks/ruby-rails-8/app/llm/cache/llm_cache.rb +44 -44
- package/templates/stacks/ruby-rails-8/app/llm/prompts/prompt_loader.rb +54 -54
- package/templates/stacks/ruby-rails-8/app/llm/prompts/summarize_v1.jinja2 +12 -12
- package/templates/stacks/ruby-rails-8/app/llm/providers/dummy_provider.rb +35 -35
- package/templates/stacks/ruby-rails-8/app/llm/providers/llm_provider.rb +67 -67
- package/templates/stacks/ruby-rails-8/app/llm/providers/openai_provider.rb +62 -62
- package/templates/stacks/ruby-rails-8/app/llm/rate_limit/token_bucket.rb +82 -82
- package/templates/stacks/ruby-rails-8/app/llm/validators/summarize_output_schema.json +21 -21
- package/templates/stacks/ruby-rails-8/app/llm/validators/validator.rb +52 -52
- package/templates/stacks/ruby-rails-8/app/models/user.rb +36 -36
- package/templates/stacks/ruby-rails-8/app/presenters/user_presenter.rb +48 -48
- package/templates/stacks/ruby-rails-8/app/repositories/document_repository.rb +57 -57
- package/templates/stacks/ruby-rails-8/app/repositories/user_repository.rb +73 -73
- package/templates/stacks/ruby-rails-8/app/services/create_user_service.rb +67 -67
- package/templates/stacks/ruby-rails-8/app/services/realtime_service.rb +53 -53
- package/templates/stacks/ruby-rails-8/app/services/summarize_document_service.rb +57 -57
- package/templates/stacks/ruby-rails-8/config/dare.yml +42 -42
- package/templates/stacks/ruby-rails-8/config/initializers/dare.rb +31 -31
- package/templates/stacks/ruby-rails-8/config/initializers/rack_attack.rb +64 -64
- package/templates/stacks/ruby-rails-8/config/initializers/rswag_api.rb +12 -12
- package/templates/stacks/ruby-rails-8/lib/tasks/dare.rake +159 -159
- package/templates/stacks/ruby-rails-8/llms.txt.erb +69 -69
- package/templates/stacks/ruby-rails-8/spec/api/summarize_spec.rb +56 -56
- package/templates/stacks/ruby-rails-8/spec/api/users_spec.rb +72 -72
- package/templates/stacks/ruby-rails-8/spec/channels/dare_updates_channel_spec.rb +61 -61
- package/templates/stacks/ruby-rails-8/spec/channels/user_updates_channel_spec.rb +56 -56
- package/templates/stacks/ruby-rails-8/spec/factories/users.rb +27 -27
- package/templates/stacks/ruby-rails-8/spec/handlers/users_handler_spec.rb +88 -88
- package/templates/stacks/ruby-rails-8/spec/rails_helper.rb +31 -31
- package/templates/stacks/ruby-rails-8/spec/services/create_user_service_spec.rb +88 -88
- package/templates/stacks/ruby-rails-8/spec/services/summarize_document_service_spec.rb +142 -142
- package/templates/stacks/ruby-rails-8/spec/swagger_helper.rb +73 -73
- package/templates/stacks/rust-axum/.dare/skills.yml +11 -11
- package/templates/stacks/rust-axum/.env.example +26 -26
- package/templates/stacks/rust-axum/.github/workflows/dare-ci.yml +40 -40
- package/templates/stacks/rust-axum/Cargo.toml.tera +53 -53
- package/templates/stacks/rust-axum/README.md.tera +37 -37
- package/templates/stacks/rust-axum/gitignore +5 -5
- package/templates/stacks/rust-axum/llms.txt.tera +54 -54
- package/templates/stacks/rust-axum/migrations/0001_create_users.sql +13 -13
- package/templates/stacks/rust-axum/openapi.json.tera +46 -46
- package/templates/stacks/rust-axum/src/config.rs +45 -45
- package/templates/stacks/rust-axum/src/errors.rs +48 -48
- package/templates/stacks/rust-axum/src/handlers/auth.rs +48 -48
- package/templates/stacks/rust-axum/src/handlers/mod.rs +3 -3
- package/templates/stacks/rust-axum/src/handlers/users.rs +81 -81
- package/templates/stacks/rust-axum/src/handlers/ws.rs +24 -24
- package/templates/stacks/rust-axum/src/lib.rs +19 -19
- package/templates/stacks/rust-axum/src/llm/mod.rs +1 -1
- package/templates/stacks/rust-axum/src/llm/provider.rs +48 -48
- package/templates/stacks/rust-axum/src/main.rs.tera +64 -64
- package/templates/stacks/rust-axum/src/middleware/auth.rs +20 -20
- package/templates/stacks/rust-axum/src/middleware/mod.rs +2 -2
- package/templates/stacks/rust-axum/src/middleware/rate_limit.rs +27 -27
- package/templates/stacks/rust-axum/src/models/mod.rs +1 -1
- package/templates/stacks/rust-axum/src/models/user.rs +13 -13
- package/templates/stacks/rust-axum/src/repositories/mod.rs +1 -1
- package/templates/stacks/rust-axum/src/repositories/user_repository.rs +62 -62
- package/templates/stacks/rust-axum/src/services/auth_service.rs +50 -50
- package/templates/stacks/rust-axum/src/services/mod.rs +2 -2
- package/templates/stacks/rust-axum/src/services/user_service.rs +53 -53
- package/templates/stacks/rust-axum/tests/integration_test.rs.tera +13 -13
- package/dist/commands/new.d.ts +0 -16
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -104
- package/dist/commands/new.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/target
|
|
2
|
-
.env
|
|
3
|
-
.env.local
|
|
4
|
-
*.log
|
|
5
|
-
.DS_Store
|
|
1
|
+
/target
|
|
2
|
+
.env
|
|
3
|
+
.env.local
|
|
4
|
+
*.log
|
|
5
|
+
.DS_Store
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
# {{ projectName }}
|
|
2
|
-
|
|
3
|
-
DARE-shaped MCP server (Rust, rmcp SDK). Default transport: **{{ defaultTransport }}**. BETA.
|
|
4
|
-
|
|
5
|
-
## Setup
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
cp .env.example .env
|
|
9
|
-
cargo build
|
|
10
|
-
cargo run
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Commands
|
|
14
|
-
|
|
15
|
-
- `cargo run` — start server (transport via --transport or MCP_TRANSPORT env)
|
|
16
|
-
- `cargo test` — tests
|
|
17
|
-
- `cargo clippy -- -D warnings` — lint
|
|
18
|
-
- `cargo audit` — RustSec advisory audit
|
|
19
|
-
- `npx @modelcontextprotocol/inspector cargo run` — MCP Inspector
|
|
20
|
-
|
|
21
|
-
## Tools (registered in src/server.rs)
|
|
22
|
-
|
|
23
|
-
| Name | Input | Output | Description |
|
|
24
|
-
|---|---|---|---|
|
|
25
|
-
| `echo` | `text: String` | `String` | Returns input verbatim. Smoke test. |
|
|
26
|
-
|
|
27
|
-
## Prompts
|
|
28
|
-
|
|
29
|
-
| Name | Args | Description |
|
|
30
|
-
|---|---|---|
|
|
31
|
-
| `summarize` | `text` | Summarize the input text. Placeholder. |
|
|
32
|
-
|
|
33
|
-
## Transports
|
|
34
|
-
|
|
35
|
-
Choose with `--transport stdio|sse|http` or `MCP_TRANSPORT`:
|
|
36
|
-
|
|
37
|
-
- `stdio` (default) — local agents. No port.
|
|
38
|
-
- `sse` — SSE-over-HTTP on MCP_PORT (default 3001), served by axum.
|
|
39
|
-
- `http` — Streamable HTTP on MCP_PORT, served by axum.
|
|
40
|
-
|
|
41
|
-
## Architecture
|
|
42
|
-
|
|
43
|
-
- `src/main.rs` — tokio entrypoint, parses args, dispatches transport.
|
|
44
|
-
- `src/server.rs` — builds the rmcp service with tools + prompts.
|
|
45
|
-
- `src/cli.rs` — clap arg parser + Transport enum + --list-tools.
|
|
46
|
-
- `src/transports/{stdio,sse,http}.rs` — one runner per transport.
|
|
47
|
-
- `src/tools/`, `src/prompts/` — pure functions, unit-tested.
|
|
48
|
-
|
|
49
|
-
## CLI inventory
|
|
50
|
-
|
|
51
|
-
`cargo run -- --json --list-tools` prints the tool registry as JSON (M-03).
|
|
52
|
-
|
|
53
|
-
## Note on beta status
|
|
54
|
-
|
|
55
|
-
`rmcp` is the official Rust MCP SDK but its API is pre-1.0. If a `cargo build`
|
|
56
|
-
fails after a dependency update, pin `rmcp` to a known-good version in Cargo.toml.
|
|
57
|
-
|
|
58
|
-
## DARE skills
|
|
59
|
-
|
|
60
|
-
See `.dare/skills.yml`.
|
|
1
|
+
# {{ projectName }}
|
|
2
|
+
|
|
3
|
+
DARE-shaped MCP server (Rust, rmcp SDK). Default transport: **{{ defaultTransport }}**. BETA.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cp .env.example .env
|
|
9
|
+
cargo build
|
|
10
|
+
cargo run
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Commands
|
|
14
|
+
|
|
15
|
+
- `cargo run` — start server (transport via --transport or MCP_TRANSPORT env)
|
|
16
|
+
- `cargo test` — tests
|
|
17
|
+
- `cargo clippy -- -D warnings` — lint
|
|
18
|
+
- `cargo audit` — RustSec advisory audit
|
|
19
|
+
- `npx @modelcontextprotocol/inspector cargo run` — MCP Inspector
|
|
20
|
+
|
|
21
|
+
## Tools (registered in src/server.rs)
|
|
22
|
+
|
|
23
|
+
| Name | Input | Output | Description |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| `echo` | `text: String` | `String` | Returns input verbatim. Smoke test. |
|
|
26
|
+
|
|
27
|
+
## Prompts
|
|
28
|
+
|
|
29
|
+
| Name | Args | Description |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| `summarize` | `text` | Summarize the input text. Placeholder. |
|
|
32
|
+
|
|
33
|
+
## Transports
|
|
34
|
+
|
|
35
|
+
Choose with `--transport stdio|sse|http` or `MCP_TRANSPORT`:
|
|
36
|
+
|
|
37
|
+
- `stdio` (default) — local agents. No port.
|
|
38
|
+
- `sse` — SSE-over-HTTP on MCP_PORT (default 3001), served by axum.
|
|
39
|
+
- `http` — Streamable HTTP on MCP_PORT, served by axum.
|
|
40
|
+
|
|
41
|
+
## Architecture
|
|
42
|
+
|
|
43
|
+
- `src/main.rs` — tokio entrypoint, parses args, dispatches transport.
|
|
44
|
+
- `src/server.rs` — builds the rmcp service with tools + prompts.
|
|
45
|
+
- `src/cli.rs` — clap arg parser + Transport enum + --list-tools.
|
|
46
|
+
- `src/transports/{stdio,sse,http}.rs` — one runner per transport.
|
|
47
|
+
- `src/tools/`, `src/prompts/` — pure functions, unit-tested.
|
|
48
|
+
|
|
49
|
+
## CLI inventory
|
|
50
|
+
|
|
51
|
+
`cargo run -- --json --list-tools` prints the tool registry as JSON (M-03).
|
|
52
|
+
|
|
53
|
+
## Note on beta status
|
|
54
|
+
|
|
55
|
+
`rmcp` is the official Rust MCP SDK but its API is pre-1.0. If a `cargo build`
|
|
56
|
+
fails after a dependency update, pin `rmcp` to a known-good version in Cargo.toml.
|
|
57
|
+
|
|
58
|
+
## DARE skills
|
|
59
|
+
|
|
60
|
+
See `.dare/skills.yml`.
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
{
|
|
2
|
-
"openapi": "3.1.0",
|
|
3
|
-
"info": {
|
|
4
|
-
"title": "{{ projectName }}",
|
|
5
|
-
"version": "0.1.0",
|
|
6
|
-
"description": "MCP server JSON-RPC surface. MCP is not REST; this describes the HTTP/SSE transport envelopes only."
|
|
7
|
-
},
|
|
8
|
-
"paths": {
|
|
9
|
-
"/sse": {
|
|
10
|
-
"get": {
|
|
11
|
-
"summary": "SSE event stream",
|
|
12
|
-
"responses": { "200": { "description": "text/event-stream with MCP JSON-RPC frames" } }
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
"/messages": {
|
|
16
|
-
"post": {
|
|
17
|
-
"summary": "MCP JSON-RPC message (HTTP / SSE post-back)",
|
|
18
|
-
"requestBody": {
|
|
19
|
-
"required": true,
|
|
20
|
-
"content": { "application/json": { "schema": { "type": "object" } } }
|
|
21
|
-
},
|
|
22
|
-
"responses": {
|
|
23
|
-
"200": {
|
|
24
|
-
"description": "JSON-RPC 2.0 response",
|
|
25
|
-
"content": { "application/json": { "schema": { "type": "object" } } }
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"openapi": "3.1.0",
|
|
3
|
+
"info": {
|
|
4
|
+
"title": "{{ projectName }}",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"description": "MCP server JSON-RPC surface. MCP is not REST; this describes the HTTP/SSE transport envelopes only."
|
|
7
|
+
},
|
|
8
|
+
"paths": {
|
|
9
|
+
"/sse": {
|
|
10
|
+
"get": {
|
|
11
|
+
"summary": "SSE event stream",
|
|
12
|
+
"responses": { "200": { "description": "text/event-stream with MCP JSON-RPC frames" } }
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"/messages": {
|
|
16
|
+
"post": {
|
|
17
|
+
"summary": "MCP JSON-RPC message (HTTP / SSE post-back)",
|
|
18
|
+
"requestBody": {
|
|
19
|
+
"required": true,
|
|
20
|
+
"content": { "application/json": { "schema": { "type": "object" } } }
|
|
21
|
+
},
|
|
22
|
+
"responses": {
|
|
23
|
+
"200": {
|
|
24
|
+
"description": "JSON-RPC 2.0 response",
|
|
25
|
+
"content": { "application/json": { "schema": { "type": "object" } } }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
//! CLI argument parsing — transport selection + tool inventory.
|
|
2
|
-
use clap::{Parser, ValueEnum};
|
|
3
|
-
|
|
4
|
-
#[derive(Debug, Clone, Copy, ValueEnum)]
|
|
5
|
-
pub enum Transport {
|
|
6
|
-
Stdio,
|
|
7
|
-
Sse,
|
|
8
|
-
Http,
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
#[derive(Debug, Parser)]
|
|
12
|
-
#[command(name = "{{ projectName }}", version, about = "DARE-shaped MCP server")]
|
|
13
|
-
pub struct Cli {
|
|
14
|
-
/// Transport to serve on. Overridden by MCP_TRANSPORT env if that is set.
|
|
15
|
-
#[arg(long, value_enum, default_value = "{{ defaultTransport }}", env = "MCP_TRANSPORT")]
|
|
16
|
-
pub transport: Transport,
|
|
17
|
-
|
|
18
|
-
/// Bind host for sse/http transports.
|
|
19
|
-
#[arg(long, default_value = "0.0.0.0", env = "MCP_HOST")]
|
|
20
|
-
pub host: String,
|
|
21
|
-
|
|
22
|
-
/// Bind port for sse/http transports.
|
|
23
|
-
#[arg(long, default_value_t = 3001, env = "MCP_PORT")]
|
|
24
|
-
pub port: u16,
|
|
25
|
-
|
|
26
|
-
/// Emit machine-readable JSON (use with --list-tools).
|
|
27
|
-
#[arg(long)]
|
|
28
|
-
pub json: bool,
|
|
29
|
-
|
|
30
|
-
/// List registered tools as JSON and exit (M-03).
|
|
31
|
-
#[arg(long)]
|
|
32
|
-
pub list_tools: bool,
|
|
33
|
-
}
|
|
1
|
+
//! CLI argument parsing — transport selection + tool inventory.
|
|
2
|
+
use clap::{Parser, ValueEnum};
|
|
3
|
+
|
|
4
|
+
#[derive(Debug, Clone, Copy, ValueEnum)]
|
|
5
|
+
pub enum Transport {
|
|
6
|
+
Stdio,
|
|
7
|
+
Sse,
|
|
8
|
+
Http,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
#[derive(Debug, Parser)]
|
|
12
|
+
#[command(name = "{{ projectName }}", version, about = "DARE-shaped MCP server")]
|
|
13
|
+
pub struct Cli {
|
|
14
|
+
/// Transport to serve on. Overridden by MCP_TRANSPORT env if that is set.
|
|
15
|
+
#[arg(long, value_enum, default_value = "{{ defaultTransport }}", env = "MCP_TRANSPORT")]
|
|
16
|
+
pub transport: Transport,
|
|
17
|
+
|
|
18
|
+
/// Bind host for sse/http transports.
|
|
19
|
+
#[arg(long, default_value = "0.0.0.0", env = "MCP_HOST")]
|
|
20
|
+
pub host: String,
|
|
21
|
+
|
|
22
|
+
/// Bind port for sse/http transports.
|
|
23
|
+
#[arg(long, default_value_t = 3001, env = "MCP_PORT")]
|
|
24
|
+
pub port: u16,
|
|
25
|
+
|
|
26
|
+
/// Emit machine-readable JSON (use with --list-tools).
|
|
27
|
+
#[arg(long)]
|
|
28
|
+
pub json: bool,
|
|
29
|
+
|
|
30
|
+
/// List registered tools as JSON and exit (M-03).
|
|
31
|
+
#[arg(long)]
|
|
32
|
+
pub list_tools: bool,
|
|
33
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
//! Public crate surface — re-exported for tests and the bin.
|
|
2
|
-
pub mod cli;
|
|
3
|
-
pub mod prompts;
|
|
4
|
-
pub mod server;
|
|
5
|
-
pub mod tools;
|
|
6
|
-
pub mod transports;
|
|
1
|
+
//! Public crate surface — re-exported for tests and the bin.
|
|
2
|
+
pub mod cli;
|
|
3
|
+
pub mod prompts;
|
|
4
|
+
pub mod server;
|
|
5
|
+
pub mod tools;
|
|
6
|
+
pub mod transports;
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
//! {{ projectName }} — MCP server entrypoint.
|
|
2
|
-
use clap::Parser;
|
|
3
|
-
use tracing_subscriber::EnvFilter;
|
|
4
|
-
|
|
5
|
-
use {{ crateName }}::cli::{Cli, Transport};
|
|
6
|
-
use {{ crateName }}::tools;
|
|
7
|
-
use {{ crateName }}::transports;
|
|
8
|
-
|
|
9
|
-
#[tokio::main]
|
|
10
|
-
async fn main() -> anyhow::Result<()> {
|
|
11
|
-
let cli = Cli::parse();
|
|
12
|
-
|
|
13
|
-
// --json --list-tools short-circuits before starting any transport (M-03).
|
|
14
|
-
if cli.list_tools && cli.json {
|
|
15
|
-
let inventory = tools::inventory_json();
|
|
16
|
-
println!("{}", serde_json::to_string_pretty(&inventory)?);
|
|
17
|
-
return Ok(());
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
tracing_subscriber::fmt()
|
|
21
|
-
.with_env_filter(EnvFilter::from_default_env())
|
|
22
|
-
.with_writer(std::io::stderr)
|
|
23
|
-
.init();
|
|
24
|
-
|
|
25
|
-
match cli.transport {
|
|
26
|
-
Transport::Stdio => transports::stdio::run().await,
|
|
27
|
-
Transport::Sse => transports::sse::run(&cli.host, cli.port).await,
|
|
28
|
-
Transport::Http => transports::http::run(&cli.host, cli.port).await,
|
|
29
|
-
}
|
|
30
|
-
}
|
|
1
|
+
//! {{ projectName }} — MCP server entrypoint.
|
|
2
|
+
use clap::Parser;
|
|
3
|
+
use tracing_subscriber::EnvFilter;
|
|
4
|
+
|
|
5
|
+
use {{ crateName }}::cli::{Cli, Transport};
|
|
6
|
+
use {{ crateName }}::tools;
|
|
7
|
+
use {{ crateName }}::transports;
|
|
8
|
+
|
|
9
|
+
#[tokio::main]
|
|
10
|
+
async fn main() -> anyhow::Result<()> {
|
|
11
|
+
let cli = Cli::parse();
|
|
12
|
+
|
|
13
|
+
// --json --list-tools short-circuits before starting any transport (M-03).
|
|
14
|
+
if cli.list_tools && cli.json {
|
|
15
|
+
let inventory = tools::inventory_json();
|
|
16
|
+
println!("{}", serde_json::to_string_pretty(&inventory)?);
|
|
17
|
+
return Ok(());
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
tracing_subscriber::fmt()
|
|
21
|
+
.with_env_filter(EnvFilter::from_default_env())
|
|
22
|
+
.with_writer(std::io::stderr)
|
|
23
|
+
.init();
|
|
24
|
+
|
|
25
|
+
match cli.transport {
|
|
26
|
+
Transport::Stdio => transports::stdio::run().await,
|
|
27
|
+
Transport::Sse => transports::sse::run(&cli.host, cli.port).await,
|
|
28
|
+
Transport::Http => transports::http::run(&cli.host, cli.port).await,
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
pub mod summarize;
|
|
1
|
+
pub mod summarize;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
//! Summarize prompt — returns the templated user-message body.
|
|
2
|
-
|
|
3
|
-
pub fn summarize(text: &str) -> String {
|
|
4
|
-
format!("Summarize the following text in 1-2 sentences.\n\n{text}")
|
|
5
|
-
}
|
|
1
|
+
//! Summarize prompt — returns the templated user-message body.
|
|
2
|
+
|
|
3
|
+
pub fn summarize(text: &str) -> String {
|
|
4
|
+
format!("Summarize the following text in 1-2 sentences.\n\n{text}")
|
|
5
|
+
}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
//! MCP service definition — wires tools + prompts via the rmcp SDK.
|
|
2
|
-
//!
|
|
3
|
-
//! NOTE: the rmcp API is pre-1.0; the exact handler-registration surface may
|
|
4
|
-
//! shift between releases. The structure below keeps the SDK glue thin and the
|
|
5
|
-
//! business logic in `tools::` / `prompts::` (pure, unit-tested) so a breaking
|
|
6
|
-
//! rmcp change only touches this file.
|
|
7
|
-
use rmcp::{
|
|
8
|
-
handler::server::ServerHandler,
|
|
9
|
-
model::{ServerCapabilities, ServerInfo},
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
use crate::tools;
|
|
13
|
-
|
|
14
|
-
#[derive(Clone, Default)]
|
|
15
|
-
pub struct DareMcpService;
|
|
16
|
-
|
|
17
|
-
impl ServerHandler for DareMcpService {
|
|
18
|
-
fn get_info(&self) -> ServerInfo {
|
|
19
|
-
ServerInfo {
|
|
20
|
-
instructions: Some(
|
|
21
|
-
"DARE-shaped MCP server ({{ projectName }}). Tools: echo. Prompts: summarize."
|
|
22
|
-
.into(),
|
|
23
|
-
),
|
|
24
|
-
capabilities: ServerCapabilities::builder()
|
|
25
|
-
.enable_tools()
|
|
26
|
-
.enable_prompts()
|
|
27
|
-
.build(),
|
|
28
|
-
..Default::default()
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/// Convenience constructor used by every transport.
|
|
34
|
-
pub fn build_service() -> DareMcpService {
|
|
35
|
-
// Touch the tool inventory so a missing tool module is a compile error.
|
|
36
|
-
let _ = tools::inventory_json();
|
|
37
|
-
DareMcpService
|
|
38
|
-
}
|
|
1
|
+
//! MCP service definition — wires tools + prompts via the rmcp SDK.
|
|
2
|
+
//!
|
|
3
|
+
//! NOTE: the rmcp API is pre-1.0; the exact handler-registration surface may
|
|
4
|
+
//! shift between releases. The structure below keeps the SDK glue thin and the
|
|
5
|
+
//! business logic in `tools::` / `prompts::` (pure, unit-tested) so a breaking
|
|
6
|
+
//! rmcp change only touches this file.
|
|
7
|
+
use rmcp::{
|
|
8
|
+
handler::server::ServerHandler,
|
|
9
|
+
model::{ServerCapabilities, ServerInfo},
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
use crate::tools;
|
|
13
|
+
|
|
14
|
+
#[derive(Clone, Default)]
|
|
15
|
+
pub struct DareMcpService;
|
|
16
|
+
|
|
17
|
+
impl ServerHandler for DareMcpService {
|
|
18
|
+
fn get_info(&self) -> ServerInfo {
|
|
19
|
+
ServerInfo {
|
|
20
|
+
instructions: Some(
|
|
21
|
+
"DARE-shaped MCP server ({{ projectName }}). Tools: echo. Prompts: summarize."
|
|
22
|
+
.into(),
|
|
23
|
+
),
|
|
24
|
+
capabilities: ServerCapabilities::builder()
|
|
25
|
+
.enable_tools()
|
|
26
|
+
.enable_prompts()
|
|
27
|
+
.build(),
|
|
28
|
+
..Default::default()
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// Convenience constructor used by every transport.
|
|
34
|
+
pub fn build_service() -> DareMcpService {
|
|
35
|
+
// Touch the tool inventory so a missing tool module is a compile error.
|
|
36
|
+
let _ = tools::inventory_json();
|
|
37
|
+
DareMcpService
|
|
38
|
+
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
//! Echo tool — pure function, unit-tested independently of the SDK.
|
|
2
|
-
|
|
3
|
-
/// Returns its input verbatim.
|
|
4
|
-
///
|
|
5
|
-
/// # Errors
|
|
6
|
-
/// Returns `Err` when `text` is empty.
|
|
7
|
-
pub fn echo(text: &str) -> Result<String, EchoError> {
|
|
8
|
-
if text.is_empty() {
|
|
9
|
-
return Err(EchoError::Empty);
|
|
10
|
-
}
|
|
11
|
-
Ok(text.to_string())
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
|
|
15
|
-
pub enum EchoError {
|
|
16
|
-
#[error("text must be a non-empty string")]
|
|
17
|
-
Empty,
|
|
18
|
-
}
|
|
1
|
+
//! Echo tool — pure function, unit-tested independently of the SDK.
|
|
2
|
+
|
|
3
|
+
/// Returns its input verbatim.
|
|
4
|
+
///
|
|
5
|
+
/// # Errors
|
|
6
|
+
/// Returns `Err` when `text` is empty.
|
|
7
|
+
pub fn echo(text: &str) -> Result<String, EchoError> {
|
|
8
|
+
if text.is_empty() {
|
|
9
|
+
return Err(EchoError::Empty);
|
|
10
|
+
}
|
|
11
|
+
Ok(text.to_string())
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
|
|
15
|
+
pub enum EchoError {
|
|
16
|
+
#[error("text must be a non-empty string")]
|
|
17
|
+
Empty,
|
|
18
|
+
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
pub mod echo;
|
|
2
|
-
|
|
3
|
-
use serde_json::{json, Value};
|
|
4
|
-
|
|
5
|
-
/// Machine-readable tool inventory for `--json --list-tools` (M-03).
|
|
6
|
-
pub fn inventory_json() -> Value {
|
|
7
|
-
json!({
|
|
8
|
-
"tools": [
|
|
9
|
-
{
|
|
10
|
-
"name": "echo",
|
|
11
|
-
"description": "Returns its input. Canonical smoke test for an MCP server.",
|
|
12
|
-
"inputSchema": {
|
|
13
|
-
"type": "object",
|
|
14
|
-
"required": ["text"],
|
|
15
|
-
"properties": {
|
|
16
|
-
"text": { "type": "string", "minLength": 1 }
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
]
|
|
21
|
-
})
|
|
22
|
-
}
|
|
1
|
+
pub mod echo;
|
|
2
|
+
|
|
3
|
+
use serde_json::{json, Value};
|
|
4
|
+
|
|
5
|
+
/// Machine-readable tool inventory for `--json --list-tools` (M-03).
|
|
6
|
+
pub fn inventory_json() -> Value {
|
|
7
|
+
json!({
|
|
8
|
+
"tools": [
|
|
9
|
+
{
|
|
10
|
+
"name": "echo",
|
|
11
|
+
"description": "Returns its input. Canonical smoke test for an MCP server.",
|
|
12
|
+
"inputSchema": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"required": ["text"],
|
|
15
|
+
"properties": {
|
|
16
|
+
"text": { "type": "string", "minLength": 1 }
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
})
|
|
22
|
+
}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
//! Streamable HTTP transport.
|
|
2
|
-
//!
|
|
3
|
-
//! rmcp exposes a streamable-http server behind a feature flag in recent
|
|
4
|
-
//! releases (pre-1.0). This wrapper centralizes the bind logic; swap the route
|
|
5
|
-
//! bodies for rmcp's StreamableHttpService integration for your version.
|
|
6
|
-
use std::net::SocketAddr;
|
|
7
|
-
|
|
8
|
-
use crate::server::build_service;
|
|
9
|
-
|
|
10
|
-
pub async fn run(host: &str, port: u16) -> anyhow::Result<()> {
|
|
11
|
-
let addr: SocketAddr = format!("{host}:{port}").parse()?;
|
|
12
|
-
tracing::info!("mcp/http listening on {addr}");
|
|
13
|
-
|
|
14
|
-
let _service = build_service();
|
|
15
|
-
|
|
16
|
-
let app = axum::Router::new()
|
|
17
|
-
.route(
|
|
18
|
-
"/messages",
|
|
19
|
-
axum::routing::post(|| async { "MCP streamable-http endpoint — wire rmcp here" })
|
|
20
|
-
.get(|| async { "MCP streamable-http endpoint — wire rmcp here" }),
|
|
21
|
-
)
|
|
22
|
-
.layer(tower_http::cors::CorsLayer::permissive());
|
|
23
|
-
|
|
24
|
-
let listener = tokio::net::TcpListener::bind(addr).await?;
|
|
25
|
-
axum::serve(listener, app).await?;
|
|
26
|
-
Ok(())
|
|
27
|
-
}
|
|
1
|
+
//! Streamable HTTP transport.
|
|
2
|
+
//!
|
|
3
|
+
//! rmcp exposes a streamable-http server behind a feature flag in recent
|
|
4
|
+
//! releases (pre-1.0). This wrapper centralizes the bind logic; swap the route
|
|
5
|
+
//! bodies for rmcp's StreamableHttpService integration for your version.
|
|
6
|
+
use std::net::SocketAddr;
|
|
7
|
+
|
|
8
|
+
use crate::server::build_service;
|
|
9
|
+
|
|
10
|
+
pub async fn run(host: &str, port: u16) -> anyhow::Result<()> {
|
|
11
|
+
let addr: SocketAddr = format!("{host}:{port}").parse()?;
|
|
12
|
+
tracing::info!("mcp/http listening on {addr}");
|
|
13
|
+
|
|
14
|
+
let _service = build_service();
|
|
15
|
+
|
|
16
|
+
let app = axum::Router::new()
|
|
17
|
+
.route(
|
|
18
|
+
"/messages",
|
|
19
|
+
axum::routing::post(|| async { "MCP streamable-http endpoint — wire rmcp here" })
|
|
20
|
+
.get(|| async { "MCP streamable-http endpoint — wire rmcp here" }),
|
|
21
|
+
)
|
|
22
|
+
.layer(tower_http::cors::CorsLayer::permissive());
|
|
23
|
+
|
|
24
|
+
let listener = tokio::net::TcpListener::bind(addr).await?;
|
|
25
|
+
axum::serve(listener, app).await?;
|
|
26
|
+
Ok(())
|
|
27
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
pub mod http;
|
|
2
|
-
pub mod sse;
|
|
3
|
-
pub mod stdio;
|
|
1
|
+
pub mod http;
|
|
2
|
+
pub mod sse;
|
|
3
|
+
pub mod stdio;
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
//! SSE-over-HTTP transport.
|
|
2
|
-
//!
|
|
3
|
-
//! rmcp exposes an SSE server behind the `transport-sse-server` feature in
|
|
4
|
-
//! recent releases; the surface is pre-1.0. This wrapper keeps the bind logic
|
|
5
|
-
//! in one place. If the SDK feature name or constructor changes, only this
|
|
6
|
-
//! file needs editing.
|
|
7
|
-
use std::net::SocketAddr;
|
|
8
|
-
|
|
9
|
-
use crate::server::build_service;
|
|
10
|
-
|
|
11
|
-
pub async fn run(host: &str, port: u16) -> anyhow::Result<()> {
|
|
12
|
-
let addr: SocketAddr = format!("{host}:{port}").parse()?;
|
|
13
|
-
tracing::info!("mcp/sse listening on {addr}");
|
|
14
|
-
|
|
15
|
-
// Build the service so capabilities are validated even if the concrete
|
|
16
|
-
// SSE wiring below is adjusted for your rmcp version.
|
|
17
|
-
let _service = build_service();
|
|
18
|
-
|
|
19
|
-
// Minimal axum app that documents where the SSE endpoints live. Replace
|
|
20
|
-
// the route bodies with rmcp's SSE server integration for your version
|
|
21
|
-
// (e.g. rmcp::transport::sse_server::SseServer::serve(addr)).
|
|
22
|
-
let app = axum::Router::new()
|
|
23
|
-
.route("/sse", axum::routing::get(|| async { "MCP SSE endpoint — wire rmcp SseServer here" }))
|
|
24
|
-
.route(
|
|
25
|
-
"/messages",
|
|
26
|
-
axum::routing::post(|| async { "MCP message endpoint — wire rmcp SseServer here" }),
|
|
27
|
-
)
|
|
28
|
-
.layer(tower_http::cors::CorsLayer::permissive());
|
|
29
|
-
|
|
30
|
-
let listener = tokio::net::TcpListener::bind(addr).await?;
|
|
31
|
-
axum::serve(listener, app).await?;
|
|
32
|
-
Ok(())
|
|
33
|
-
}
|
|
1
|
+
//! SSE-over-HTTP transport.
|
|
2
|
+
//!
|
|
3
|
+
//! rmcp exposes an SSE server behind the `transport-sse-server` feature in
|
|
4
|
+
//! recent releases; the surface is pre-1.0. This wrapper keeps the bind logic
|
|
5
|
+
//! in one place. If the SDK feature name or constructor changes, only this
|
|
6
|
+
//! file needs editing.
|
|
7
|
+
use std::net::SocketAddr;
|
|
8
|
+
|
|
9
|
+
use crate::server::build_service;
|
|
10
|
+
|
|
11
|
+
pub async fn run(host: &str, port: u16) -> anyhow::Result<()> {
|
|
12
|
+
let addr: SocketAddr = format!("{host}:{port}").parse()?;
|
|
13
|
+
tracing::info!("mcp/sse listening on {addr}");
|
|
14
|
+
|
|
15
|
+
// Build the service so capabilities are validated even if the concrete
|
|
16
|
+
// SSE wiring below is adjusted for your rmcp version.
|
|
17
|
+
let _service = build_service();
|
|
18
|
+
|
|
19
|
+
// Minimal axum app that documents where the SSE endpoints live. Replace
|
|
20
|
+
// the route bodies with rmcp's SSE server integration for your version
|
|
21
|
+
// (e.g. rmcp::transport::sse_server::SseServer::serve(addr)).
|
|
22
|
+
let app = axum::Router::new()
|
|
23
|
+
.route("/sse", axum::routing::get(|| async { "MCP SSE endpoint — wire rmcp SseServer here" }))
|
|
24
|
+
.route(
|
|
25
|
+
"/messages",
|
|
26
|
+
axum::routing::post(|| async { "MCP message endpoint — wire rmcp SseServer here" }),
|
|
27
|
+
)
|
|
28
|
+
.layer(tower_http::cors::CorsLayer::permissive());
|
|
29
|
+
|
|
30
|
+
let listener = tokio::net::TcpListener::bind(addr).await?;
|
|
31
|
+
axum::serve(listener, app).await?;
|
|
32
|
+
Ok(())
|
|
33
|
+
}
|