memory-journal-mcp 6.1.2 → 6.2.1
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/README.md +44 -28
- package/dist/{chunk-X4SWFATC.js → chunk-BI4ZNSKA.js} +38 -24
- package/dist/{chunk-HCEWINSB.js → chunk-N6EBIDN7.js} +99 -102
- package/dist/cli.js +2 -2
- package/dist/index.js +2 -2
- package/dist/tools-WPRY5MJ6.js +2 -0
- package/package.json +10 -1
- package/skills/github-commander/SKILL.md +151 -0
- package/skills/github-commander/config/project-config.example.md +125 -0
- package/skills/github-commander/workflows/code-quality-audit.md +80 -0
- package/skills/github-commander/workflows/full-audit.md +134 -0
- package/skills/github-commander/workflows/issue-triage.md +239 -0
- package/skills/github-commander/workflows/milestone-sprint.md +81 -0
- package/skills/github-commander/workflows/perf-audit.md +142 -0
- package/skills/github-commander/workflows/pr-review.md +123 -0
- package/skills/github-commander/workflows/security-audit.md +170 -0
- package/skills/github-commander/workflows/update-deps.md +109 -0
- package/.dockerignore +0 -139
- package/.gitattributes +0 -20
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -95
- package/.github/ISSUE_TEMPLATE/config.yml +0 -11
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -110
- package/.github/ISSUE_TEMPLATE/question.md +0 -78
- package/.github/aw/actions-lock.json +0 -14
- package/.github/copilot-instructions.md +0 -122
- package/.github/dependabot.yml +0 -93
- package/.github/pull_request_template.md +0 -135
- package/.github/workflows/README.md +0 -133
- package/.github/workflows/agentics-maintenance.yml +0 -141
- package/.github/workflows/auto-release.yml +0 -68
- package/.github/workflows/ci-health-monitor.lock.yml +0 -1121
- package/.github/workflows/ci-health-monitor.md +0 -87
- package/.github/workflows/codeql.yml +0 -41
- package/.github/workflows/dependabot-auto-merge.yml +0 -42
- package/.github/workflows/dependency-maintenance.lock.yml +0 -1182
- package/.github/workflows/dependency-maintenance.md +0 -147
- package/.github/workflows/docker-publish.yml +0 -254
- package/.github/workflows/docs-drift-detector.lock.yml +0 -1142
- package/.github/workflows/docs-drift-detector.md +0 -115
- package/.github/workflows/lint-and-test.yml +0 -60
- package/.github/workflows/publish-npm.yml +0 -85
- package/.github/workflows/secrets-scanning.yml +0 -32
- package/.github/workflows/security-update.yml +0 -127
- package/.gitleaks.toml +0 -9
- package/.prettierignore +0 -21
- package/.prettierrc +0 -33
- package/.scout-ignore +0 -12
- package/.trivyignore +0 -21
- package/CHANGELOG.md +0 -1814
- package/CODE_OF_CONDUCT.md +0 -133
- package/CONTRIBUTING.md +0 -263
- package/DOCKER_README.md +0 -331
- package/Dockerfile +0 -128
- package/SECURITY.md +0 -227
- package/UNRELEASED.md +0 -1
- package/dist/tools-T4U5A3X4.js +0 -2
- package/docker-compose.yml +0 -71
- package/docs/README.md +0 -18
- package/docs/agentic-journal-synergy.md +0 -175
- package/docs/copilot-setup.md +0 -72
- package/eslint.config.js +0 -110
- package/mcp-config-example.json +0 -21
- package/playwright.config.ts +0 -35
- package/releases/v2.1.0.md +0 -220
- package/releases/v2.2.0.md +0 -168
- package/releases/v3.0.0.md +0 -237
- package/releases/v3.1.0.md +0 -104
- package/releases/v3.1.1.md +0 -42
- package/releases/v3.1.2.md +0 -40
- package/releases/v3.1.3.md +0 -64
- package/releases/v3.1.4.md +0 -32
- package/releases/v3.1.5.md +0 -44
- package/releases/v4.0.0.md +0 -71
- package/releases/v4.1.0.md +0 -88
- package/releases/v4.2.0.md +0 -90
- package/releases/v4.3.0.md +0 -92
- package/releases/v4.3.1.md +0 -69
- package/releases/v4.4.0.md +0 -120
- package/releases/v4.4.1.md +0 -33
- package/releases/v4.4.2.md +0 -31
- package/releases/v4.5.0.md +0 -116
- package/releases/v5.0.0.md +0 -105
- package/releases/v5.0.1.md +0 -25
- package/releases/v5.1.0.md +0 -83
- package/releases/v5.1.1.md +0 -10
- package/releases/v6.0.0.md +0 -48
- package/releases/v6.0.1.md +0 -36
- package/releases/v6.1.0.md +0 -68
- package/releases/v6.1.1.md +0 -30
- package/releases/v6.1.2.md +0 -23
- package/scripts/generate-server-instructions.ts +0 -306
- package/scripts/server-instructions-function-body.ts +0 -107
- package/scripts/server-instructions-gotchas.ts +0 -45
- package/server.json +0 -42
- package/social-preview.png +0 -0
- package/src/auth/auth-context.ts +0 -78
- package/src/auth/authorization-server-discovery.ts +0 -263
- package/src/auth/errors.ts +0 -215
- package/src/auth/index.ts +0 -58
- package/src/auth/middleware.ts +0 -392
- package/src/auth/oauth-resource-server.ts +0 -170
- package/src/auth/scope-map.ts +0 -46
- package/src/auth/scopes.ts +0 -256
- package/src/auth/token-validator.ts +0 -293
- package/src/auth/transport-agnostic.ts +0 -164
- package/src/auth/types.ts +0 -372
- package/src/cli.ts +0 -279
- package/src/codemode/api-constants.ts +0 -263
- package/src/codemode/api.ts +0 -302
- package/src/codemode/auto-return.ts +0 -65
- package/src/codemode/index.ts +0 -47
- package/src/codemode/sandbox-factory.ts +0 -144
- package/src/codemode/sandbox.ts +0 -220
- package/src/codemode/security.ts +0 -155
- package/src/codemode/types.ts +0 -228
- package/src/codemode/worker-sandbox.ts +0 -277
- package/src/codemode/worker-script.ts +0 -239
- package/src/constants/icons.ts +0 -183
- package/src/constants/server-instructions.md +0 -166
- package/src/constants/server-instructions.ts +0 -514
- package/src/database/adapter-factory.ts +0 -16
- package/src/database/core/entry-columns.ts +0 -10
- package/src/database/core/interfaces.ts +0 -188
- package/src/database/core/schema.ts +0 -152
- package/src/database/sqlite-adapter/backup.ts +0 -167
- package/src/database/sqlite-adapter/entries/crud.ts +0 -233
- package/src/database/sqlite-adapter/entries/importance.ts +0 -76
- package/src/database/sqlite-adapter/entries/index.ts +0 -142
- package/src/database/sqlite-adapter/entries/search.ts +0 -294
- package/src/database/sqlite-adapter/entries/shared.ts +0 -102
- package/src/database/sqlite-adapter/entries/statistics.ts +0 -162
- package/src/database/sqlite-adapter/index.ts +0 -265
- package/src/database/sqlite-adapter/native-connection.ts +0 -301
- package/src/database/sqlite-adapter/relationships.ts +0 -70
- package/src/database/sqlite-adapter/tags.ts +0 -182
- package/src/filtering/tool-filter.ts +0 -312
- package/src/github/github-integration/client.ts +0 -114
- package/src/github/github-integration/index.ts +0 -297
- package/src/github/github-integration/insights.ts +0 -155
- package/src/github/github-integration/issues.ts +0 -213
- package/src/github/github-integration/milestones.ts +0 -262
- package/src/github/github-integration/projects.ts +0 -414
- package/src/github/github-integration/pull-requests.ts +0 -235
- package/src/github/github-integration/repository.ts +0 -110
- package/src/github/github-integration/types.ts +0 -43
- package/src/handlers/prompts/github.ts +0 -210
- package/src/handlers/prompts/index.ts +0 -97
- package/src/handlers/prompts/workflow.ts +0 -361
- package/src/handlers/resources/core/briefing/context-section.ts +0 -182
- package/src/handlers/resources/core/briefing/github-section.ts +0 -354
- package/src/handlers/resources/core/briefing/index.ts +0 -106
- package/src/handlers/resources/core/briefing/user-message.ts +0 -114
- package/src/handlers/resources/core/health.ts +0 -75
- package/src/handlers/resources/core/index.ts +0 -31
- package/src/handlers/resources/core/instructions.ts +0 -45
- package/src/handlers/resources/core/utilities.ts +0 -310
- package/src/handlers/resources/github.ts +0 -340
- package/src/handlers/resources/graph.ts +0 -218
- package/src/handlers/resources/help.ts +0 -410
- package/src/handlers/resources/index.ts +0 -143
- package/src/handlers/resources/shared.ts +0 -219
- package/src/handlers/resources/team.ts +0 -134
- package/src/handlers/resources/templates.ts +0 -334
- package/src/handlers/tools/admin.ts +0 -351
- package/src/handlers/tools/analytics.ts +0 -346
- package/src/handlers/tools/backup.ts +0 -272
- package/src/handlers/tools/codemode.ts +0 -188
- package/src/handlers/tools/core.ts +0 -359
- package/src/handlers/tools/error-fields-mixin.ts +0 -10
- package/src/handlers/tools/export.ts +0 -150
- package/src/handlers/tools/github/copilot-tools.ts +0 -72
- package/src/handlers/tools/github/helpers.ts +0 -125
- package/src/handlers/tools/github/insights-tools.ts +0 -112
- package/src/handlers/tools/github/issue-tools.ts +0 -442
- package/src/handlers/tools/github/kanban-tools.ts +0 -153
- package/src/handlers/tools/github/milestone-tools.ts +0 -371
- package/src/handlers/tools/github/mutation-tools.ts +0 -17
- package/src/handlers/tools/github/read-tools.ts +0 -302
- package/src/handlers/tools/github/schemas.ts +0 -435
- package/src/handlers/tools/github.ts +0 -39
- package/src/handlers/tools/index.ts +0 -255
- package/src/handlers/tools/relationships.ts +0 -390
- package/src/handlers/tools/schemas.ts +0 -165
- package/src/handlers/tools/search.ts +0 -448
- package/src/handlers/tools/team/admin-tools.ts +0 -164
- package/src/handlers/tools/team/analytics-tools.ts +0 -233
- package/src/handlers/tools/team/backup-tools.ts +0 -83
- package/src/handlers/tools/team/core-tools.ts +0 -197
- package/src/handlers/tools/team/export-tools.ts +0 -130
- package/src/handlers/tools/team/helpers.ts +0 -66
- package/src/handlers/tools/team/index.ts +0 -45
- package/src/handlers/tools/team/relationship-tools.ts +0 -219
- package/src/handlers/tools/team/schemas.ts +0 -558
- package/src/handlers/tools/team/search-tools.ts +0 -145
- package/src/handlers/tools/team/vector-tools.ts +0 -261
- package/src/index.ts +0 -57
- package/src/server/mcp-server.ts +0 -446
- package/src/server/registration.ts +0 -141
- package/src/server/scheduler.ts +0 -283
- package/src/transports/http/handlers.ts +0 -78
- package/src/transports/http/index.ts +0 -8
- package/src/transports/http/security.ts +0 -147
- package/src/transports/http/server/index.ts +0 -397
- package/src/transports/http/server/legacy-sse.ts +0 -87
- package/src/transports/http/server/stateful.ts +0 -222
- package/src/transports/http/server/stateless.ts +0 -42
- package/src/transports/http/types.ts +0 -132
- package/src/types/entities.ts +0 -145
- package/src/types/error-types.ts +0 -92
- package/src/types/errors.ts +0 -200
- package/src/types/filtering.ts +0 -55
- package/src/types/github.ts +0 -216
- package/src/types/index.ts +0 -348
- package/src/utils/error-helpers.ts +0 -78
- package/src/utils/errors/error-response-fields.ts +0 -29
- package/src/utils/errors/suggestions.ts +0 -94
- package/src/utils/github-helpers.ts +0 -33
- package/src/utils/logger.ts +0 -107
- package/src/utils/mcp-logger.ts +0 -155
- package/src/utils/progress-utils.ts +0 -100
- package/src/utils/query-helpers.ts +0 -78
- package/src/utils/resource-annotations.ts +0 -75
- package/src/utils/security-utils.ts +0 -198
- package/src/utils/vector-index-helpers.ts +0 -24
- package/src/vector/vector-search-manager.ts +0 -409
- package/src/version.ts +0 -15
- package/test-server/README.md +0 -193
- package/test-server/code-map.md +0 -399
- package/test-server/test-agent-experience.md +0 -213
- package/test-server/test-filter-instructions.mjs +0 -295
- package/test-server/test-instruction-levels.mjs +0 -102
- package/test-server/test-preflight.md +0 -55
- package/test-server/test-prompts.mjs +0 -185
- package/test-server/test-scheduler.mjs +0 -174
- package/test-server/test-tool-annotations.mjs +0 -115
- package/test-server/test-tools-codemode.md +0 -632
- package/test-server/test-tools-codemode2.md +0 -1218
- package/test-server/test-tools-team.md +0 -215
- package/test-server/test-tools.md +0 -429
- package/test-server/test-tools2.md +0 -361
- package/test-server/test-tools3.md +0 -396
- package/test-server/tool-reference.md +0 -231
- package/tests/README.md +0 -54
- package/tests/auth/auth-context.test.ts +0 -162
- package/tests/auth/authorization-server-discovery.test.ts +0 -265
- package/tests/auth/errors.test.ts +0 -170
- package/tests/auth/middleware.test.ts +0 -585
- package/tests/auth/oauth-resource-server.test.ts +0 -173
- package/tests/auth/scope-map.test.ts +0 -66
- package/tests/auth/scopes.test.ts +0 -347
- package/tests/auth/token-validator.test.ts +0 -271
- package/tests/codemode/api.test.ts +0 -396
- package/tests/codemode/auto-return.test.ts +0 -167
- package/tests/codemode/codemode-tool-handlers.test.ts +0 -197
- package/tests/codemode/sandbox-factory.test.ts +0 -152
- package/tests/codemode/sandbox.test.ts +0 -190
- package/tests/codemode/security.test.ts +0 -242
- package/tests/codemode/worker-sandbox.test.ts +0 -106
- package/tests/constants/icons.test.ts +0 -101
- package/tests/constants/server-instructions.test.ts +0 -514
- package/tests/database/crud-workflow-branches.test.ts +0 -418
- package/tests/database/database-branches.test.ts +0 -132
- package/tests/database/entries-auth-branches.test.ts +0 -390
- package/tests/database/native-connection.test.ts +0 -249
- package/tests/database/shared-helpers.test.ts +0 -103
- package/tests/database/sqlite-adapter.bench.ts +0 -63
- package/tests/database/sqlite-adapter.test.ts +0 -690
- package/tests/database/tags.test.ts +0 -134
- package/tests/e2e/README.md +0 -39
- package/tests/e2e/auth.spec.ts +0 -106
- package/tests/e2e/codemode-abuse.spec.ts +0 -75
- package/tests/e2e/health.spec.ts +0 -63
- package/tests/e2e/helpers.ts +0 -139
- package/tests/e2e/oauth-discovery.spec.ts +0 -102
- package/tests/e2e/oauth-scopes.spec.ts +0 -222
- package/tests/e2e/payloads-admin.spec.ts +0 -76
- package/tests/e2e/payloads-analytics.spec.ts +0 -37
- package/tests/e2e/payloads-backup-restore.spec.ts +0 -102
- package/tests/e2e/payloads-backup.spec.ts +0 -44
- package/tests/e2e/payloads-codemode-api.spec.ts +0 -131
- package/tests/e2e/payloads-codemode-readonly.spec.ts +0 -116
- package/tests/e2e/payloads-codemode.spec.ts +0 -116
- package/tests/e2e/payloads-core.spec.ts +0 -82
- package/tests/e2e/payloads-error-contracts.spec.ts +0 -159
- package/tests/e2e/payloads-export.spec.ts +0 -46
- package/tests/e2e/payloads-github-degradation.spec.ts +0 -73
- package/tests/e2e/payloads-github.spec.ts +0 -176
- package/tests/e2e/payloads-relationships.spec.ts +0 -56
- package/tests/e2e/payloads-search.spec.ts +0 -64
- package/tests/e2e/payloads-team-happy.spec.ts +0 -231
- package/tests/e2e/payloads-team.spec.ts +0 -174
- package/tests/e2e/prompts-expanded.spec.ts +0 -137
- package/tests/e2e/prompts.spec.ts +0 -62
- package/tests/e2e/protocols.spec.ts +0 -134
- package/tests/e2e/rate-limiting.spec.ts +0 -291
- package/tests/e2e/resources-briefing-env.spec.ts +0 -106
- package/tests/e2e/resources-complete.spec.ts +0 -180
- package/tests/e2e/resources-expanded.spec.ts +0 -83
- package/tests/e2e/resources-instructions-levels.spec.ts +0 -145
- package/tests/e2e/resources-templates.spec.ts +0 -123
- package/tests/e2e/resources.spec.ts +0 -103
- package/tests/e2e/scheduler.spec.ts +0 -79
- package/tests/e2e/security.spec.ts +0 -112
- package/tests/e2e/session-advanced.spec.ts +0 -152
- package/tests/e2e/sessions.spec.ts +0 -95
- package/tests/e2e/stateless.spec.ts +0 -79
- package/tests/e2e/streaming.spec.ts +0 -176
- package/tests/e2e/tool-filtering-presets.spec.ts +0 -192
- package/tests/e2e/tool-filtering.spec.ts +0 -77
- package/tests/e2e/tools.spec.ts +0 -111
- package/tests/filtering/tool-filter.test.ts +0 -314
- package/tests/github/client-issues-errors.test.ts +0 -433
- package/tests/github/github-integration-branches.test.ts +0 -490
- package/tests/github/github-integration.test.ts +0 -1015
- package/tests/github/github-managers-branches.test.ts +0 -907
- package/tests/github/pull-requests.test.ts +0 -334
- package/tests/handlers/analytics-branches.test.ts +0 -222
- package/tests/handlers/backup-branches.test.ts +0 -270
- package/tests/handlers/briefing-context-section.test.ts +0 -388
- package/tests/handlers/briefing-github-section.test.ts +0 -392
- package/tests/handlers/briefing-user-message.test.ts +0 -405
- package/tests/handlers/codemode-tools.test.ts +0 -85
- package/tests/handlers/copilot-tools.test.ts +0 -126
- package/tests/handlers/error-path-coverage.test.ts +0 -324
- package/tests/handlers/export-tools.test.ts +0 -203
- package/tests/handlers/github-resource-handlers.test.ts +0 -929
- package/tests/handlers/github-tool-handlers.test.ts +0 -1452
- package/tests/handlers/handler-error-branches.test.ts +0 -346
- package/tests/handlers/help-resource.test.ts +0 -92
- package/tests/handlers/prompt-handler-coverage.test.ts +0 -108
- package/tests/handlers/prompt-handlers.test.ts +0 -131
- package/tests/handlers/resource-handler-coverage.test.ts +0 -281
- package/tests/handlers/resource-handlers.test.ts +0 -357
- package/tests/handlers/resource-prompt-branches.test.ts +0 -495
- package/tests/handlers/search-tool-handlers.test.ts +0 -379
- package/tests/handlers/targeted-gap-closure.test.ts +0 -387
- package/tests/handlers/team-admin.test.ts +0 -291
- package/tests/handlers/team-analytics.test.ts +0 -220
- package/tests/handlers/team-core.test.ts +0 -148
- package/tests/handlers/team-data.test.ts +0 -198
- package/tests/handlers/team-relationships.test.ts +0 -271
- package/tests/handlers/team-resource-handlers.test.ts +0 -161
- package/tests/handlers/team-search.test.ts +0 -134
- package/tests/handlers/team-tool-handlers.test.ts +0 -301
- package/tests/handlers/team-vector.test.ts +0 -213
- package/tests/handlers/template-github-branches.test.ts +0 -676
- package/tests/handlers/tool-annotations.test.ts +0 -90
- package/tests/handlers/tool-handler-coverage.test.ts +0 -514
- package/tests/handlers/tool-handlers.test.ts +0 -510
- package/tests/handlers/tool-output-schemas.test.ts +0 -116
- package/tests/handlers/vector-tool-handlers.test.ts +0 -238
- package/tests/security/sql-injection.test.ts +0 -284
- package/tests/server/mcp-server.bench.ts +0 -55
- package/tests/server/mcp-server.test.ts +0 -1326
- package/tests/server/scheduler.test.ts +0 -400
- package/tests/transports/http-legacy-sse.test.ts +0 -275
- package/tests/transports/http-security.test.ts +0 -322
- package/tests/transports/http-stateful.test.ts +0 -487
- package/tests/transports/http-transport-server.test.ts +0 -301
- package/tests/transports/http-transport.test.ts +0 -771
- package/tests/utils/github-helpers.test.ts +0 -58
- package/tests/utils/logger.test.ts +0 -180
- package/tests/utils/mcp-logger.test.ts +0 -211
- package/tests/utils/progress-utils.test.ts +0 -156
- package/tests/utils/query-helpers.test.ts +0 -80
- package/tests/utils/security-utils.test.ts +0 -82
- package/tests/vector/vector-search-branches.test.ts +0 -111
- package/tests/vector/vector-search-manager.test.ts +0 -375
- package/tests/vector/vector-search.bench.ts +0 -48
- package/tsconfig.json +0 -42
- package/tsup.config.ts +0 -19
- package/vitest.config.ts +0 -25
package/src/server/mcp-server.ts
DELETED
|
@@ -1,446 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Journal MCP Server - Main Server
|
|
3
|
-
*
|
|
4
|
-
* MCP server implementation with tools, resources, and prompts.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
8
|
-
|
|
9
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
10
|
-
import type { z } from 'zod'
|
|
11
|
-
|
|
12
|
-
import type { IDatabaseAdapter } from '../database/core/interfaces.js'
|
|
13
|
-
import { DatabaseAdapterFactory } from '../database/adapter-factory.js'
|
|
14
|
-
import { VectorSearchManager } from '../vector/vector-search-manager.js'
|
|
15
|
-
import { GitHubIntegration } from '../github/github-integration/index.js'
|
|
16
|
-
import { logger } from '../utils/logger.js'
|
|
17
|
-
import {
|
|
18
|
-
parseToolFilter,
|
|
19
|
-
getToolFilterFromEnv,
|
|
20
|
-
getFilterSummary,
|
|
21
|
-
getEnabledGroups,
|
|
22
|
-
type ToolFilterConfig,
|
|
23
|
-
} from '../filtering/tool-filter.js'
|
|
24
|
-
import { getTools, callTool } from '../handlers/tools/index.js'
|
|
25
|
-
import { getResources, readResource } from '../handlers/resources/index.js'
|
|
26
|
-
import { getPrompts } from '../handlers/prompts/index.js'
|
|
27
|
-
import { generateInstructions } from '../constants/server-instructions.js'
|
|
28
|
-
import { Scheduler, type SchedulerOptions } from './scheduler.js'
|
|
29
|
-
import { HttpTransport } from '../transports/http/index.js'
|
|
30
|
-
import { setDefaultSandboxMode, type SandboxMode } from '../codemode/index.js'
|
|
31
|
-
import { DEFAULT_BRIEFING_CONFIG, type BriefingConfig } from '../handlers/resources/shared.js'
|
|
32
|
-
import {
|
|
33
|
-
registerResources,
|
|
34
|
-
registerPrompts,
|
|
35
|
-
type ResourceDefinition,
|
|
36
|
-
type PromptDefinition,
|
|
37
|
-
type ResourceReadHandler,
|
|
38
|
-
} from './registration.js'
|
|
39
|
-
import { VERSION } from '../version.js'
|
|
40
|
-
|
|
41
|
-
export interface ServerOptions {
|
|
42
|
-
transport: 'stdio' | 'http'
|
|
43
|
-
port?: number
|
|
44
|
-
host?: string
|
|
45
|
-
dbPath: string
|
|
46
|
-
teamDbPath?: string
|
|
47
|
-
toolFilter?: string
|
|
48
|
-
defaultProjectNumber?: number
|
|
49
|
-
autoRebuildIndex?: boolean
|
|
50
|
-
statelessHttp?: boolean
|
|
51
|
-
corsOrigins?: string[]
|
|
52
|
-
authToken?: string
|
|
53
|
-
enableHSTS?: boolean
|
|
54
|
-
scheduler?: SchedulerOptions
|
|
55
|
-
sandboxMode?: SandboxMode
|
|
56
|
-
// OAuth 2.1 options
|
|
57
|
-
oauthEnabled?: boolean
|
|
58
|
-
oauthIssuer?: string
|
|
59
|
-
oauthAudience?: string
|
|
60
|
-
oauthJwksUri?: string
|
|
61
|
-
oauthClockTolerance?: number
|
|
62
|
-
// Briefing configuration
|
|
63
|
-
briefingConfig?: BriefingConfig
|
|
64
|
-
// Instruction level
|
|
65
|
-
instructionLevel?: 'essential' | 'standard' | 'full'
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Create and start the MCP server
|
|
70
|
-
*/
|
|
71
|
-
export async function createServer(options: ServerOptions): Promise<void> {
|
|
72
|
-
const { transport, dbPath, teamDbPath, toolFilter, defaultProjectNumber } = options
|
|
73
|
-
|
|
74
|
-
// Configure sandbox mode for Code Mode
|
|
75
|
-
if (options.sandboxMode) {
|
|
76
|
-
setDefaultSandboxMode(options.sandboxMode)
|
|
77
|
-
logger.info('Code Mode sandbox configured', {
|
|
78
|
-
module: 'McpServer',
|
|
79
|
-
sandboxMode: options.sandboxMode,
|
|
80
|
-
})
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Initialize database
|
|
84
|
-
const db = await DatabaseAdapterFactory.create(dbPath)
|
|
85
|
-
await db.initialize()
|
|
86
|
-
logger.info('Database initialized', { module: 'McpServer', dbPath })
|
|
87
|
-
|
|
88
|
-
// Initialize team database if configured
|
|
89
|
-
let teamDb: IDatabaseAdapter | undefined
|
|
90
|
-
if (teamDbPath) {
|
|
91
|
-
teamDb = await DatabaseAdapterFactory.create(teamDbPath)
|
|
92
|
-
await teamDb.initialize()
|
|
93
|
-
teamDb.applyTeamSchema()
|
|
94
|
-
logger.info('Team database initialized', { module: 'McpServer', teamDbPath })
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Initialize vector search manager (lazy loading - model loads on first use)
|
|
98
|
-
const vectorManager = new VectorSearchManager(db)
|
|
99
|
-
logger.info('Vector search manager created (lazy initialization)', { module: 'McpServer' })
|
|
100
|
-
|
|
101
|
-
// Initialize team vector search manager if team DB is configured
|
|
102
|
-
let teamVectorManager: VectorSearchManager | undefined
|
|
103
|
-
if (teamDb) {
|
|
104
|
-
teamVectorManager = new VectorSearchManager(teamDb)
|
|
105
|
-
logger.info('Team vector search manager created', { module: 'McpServer' })
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Auto-rebuild vector index if enabled
|
|
109
|
-
if (options.autoRebuildIndex) {
|
|
110
|
-
logger.info('Auto-rebuilding vector index on startup...', { module: 'McpServer' })
|
|
111
|
-
await vectorManager.initialize()
|
|
112
|
-
const { indexed: count } = await vectorManager.rebuildIndex(db)
|
|
113
|
-
logger.info('Vector index rebuilt on startup', {
|
|
114
|
-
module: 'McpServer',
|
|
115
|
-
entriesIndexed: count,
|
|
116
|
-
})
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Initialize GitHub integration
|
|
120
|
-
const github = new GitHubIntegration()
|
|
121
|
-
logger.info('GitHub integration initialized', {
|
|
122
|
-
module: 'McpServer',
|
|
123
|
-
hasToken: github.isApiAvailable(),
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
// Parse tool filter
|
|
127
|
-
let filterConfig: ToolFilterConfig | null = null
|
|
128
|
-
if (toolFilter) {
|
|
129
|
-
filterConfig = parseToolFilter(toolFilter)
|
|
130
|
-
logger.info('Tool filter applied', {
|
|
131
|
-
module: 'McpServer',
|
|
132
|
-
summary: getFilterSummary(filterConfig),
|
|
133
|
-
})
|
|
134
|
-
} else {
|
|
135
|
-
filterConfig = getToolFilterFromEnv()
|
|
136
|
-
if (filterConfig) {
|
|
137
|
-
logger.info('Tool filter from env', {
|
|
138
|
-
module: 'McpServer',
|
|
139
|
-
summary: getFilterSummary(filterConfig),
|
|
140
|
-
})
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Get resources and prompts for instruction generation
|
|
145
|
-
const resources = getResources()
|
|
146
|
-
const prompts = getPrompts()
|
|
147
|
-
|
|
148
|
-
// Fetch latest entry for initial briefing context
|
|
149
|
-
const recentEntries = db.getRecentEntries(1)
|
|
150
|
-
const latestEntry = recentEntries[0]
|
|
151
|
-
? {
|
|
152
|
-
id: recentEntries[0].id,
|
|
153
|
-
timestamp: recentEntries[0].timestamp,
|
|
154
|
-
entryType: recentEntries[0].entryType,
|
|
155
|
-
content: recentEntries[0].content,
|
|
156
|
-
}
|
|
157
|
-
: undefined
|
|
158
|
-
|
|
159
|
-
// Get all tools once (unfiltered) for both instruction generation and registration
|
|
160
|
-
const allTools = getTools(
|
|
161
|
-
db,
|
|
162
|
-
null,
|
|
163
|
-
vectorManager,
|
|
164
|
-
github,
|
|
165
|
-
{ defaultProjectNumber },
|
|
166
|
-
teamDb,
|
|
167
|
-
teamVectorManager
|
|
168
|
-
)
|
|
169
|
-
const allToolNames = new Set(allTools.map((t) => t.name))
|
|
170
|
-
|
|
171
|
-
// Generate dynamic instructions based on enabled tools, prompts, and latest entry
|
|
172
|
-
const enabledToolSet = filterConfig?.enabledTools ?? allToolNames
|
|
173
|
-
const enabledGroups = filterConfig ? getEnabledGroups(filterConfig.enabledTools) : undefined
|
|
174
|
-
const instructions = generateInstructions(
|
|
175
|
-
enabledToolSet,
|
|
176
|
-
prompts.map((p) => {
|
|
177
|
-
const prompt = p as { name: string; description?: string }
|
|
178
|
-
return { name: prompt.name, description: prompt.description }
|
|
179
|
-
}),
|
|
180
|
-
latestEntry,
|
|
181
|
-
options.instructionLevel ?? 'standard',
|
|
182
|
-
enabledGroups
|
|
183
|
-
)
|
|
184
|
-
|
|
185
|
-
// Create MCP server with capabilities and instructions
|
|
186
|
-
const server = new McpServer(
|
|
187
|
-
{
|
|
188
|
-
name: 'memory-journal-mcp',
|
|
189
|
-
version: VERSION,
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
capabilities: {
|
|
193
|
-
logging: {},
|
|
194
|
-
},
|
|
195
|
-
instructions,
|
|
196
|
-
}
|
|
197
|
-
)
|
|
198
|
-
|
|
199
|
-
// Apply filter to get the set of tools to register
|
|
200
|
-
const tools = filterConfig
|
|
201
|
-
? getTools(
|
|
202
|
-
db,
|
|
203
|
-
filterConfig,
|
|
204
|
-
vectorManager,
|
|
205
|
-
github,
|
|
206
|
-
{ defaultProjectNumber },
|
|
207
|
-
teamDb,
|
|
208
|
-
teamVectorManager
|
|
209
|
-
)
|
|
210
|
-
: allTools
|
|
211
|
-
for (const tool of tools) {
|
|
212
|
-
// Build tool options matching MCP SDK expectations
|
|
213
|
-
const toolOptions: Record<string, unknown> = {
|
|
214
|
-
description: tool.description,
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// MCP 2025-11-25: Pass title for human-readable display
|
|
218
|
-
if (tool.title) {
|
|
219
|
-
toolOptions['title'] = tool.title
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
if (tool.inputSchema !== undefined) {
|
|
223
|
-
toolOptions['inputSchema'] = tool.inputSchema
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
// MCP 2025-11-25: Pass outputSchema for structured responses
|
|
227
|
-
if (tool.outputSchema !== undefined) {
|
|
228
|
-
toolOptions['outputSchema'] = tool.outputSchema
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
if (tool.annotations !== undefined) {
|
|
232
|
-
toolOptions['annotations'] = tool.annotations
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// MCP 2025-11-25: Pass icons for visual representation
|
|
236
|
-
if (tool.icons) {
|
|
237
|
-
toolOptions['icons'] = tool.icons
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Capture whether this tool has outputSchema for response handling
|
|
241
|
-
const hasOutputSchema = Boolean(tool.outputSchema)
|
|
242
|
-
|
|
243
|
-
server.registerTool(
|
|
244
|
-
tool.name,
|
|
245
|
-
toolOptions as {
|
|
246
|
-
description?: string
|
|
247
|
-
inputSchema?: z.ZodType
|
|
248
|
-
outputSchema?: z.ZodType
|
|
249
|
-
},
|
|
250
|
-
async (args, extra) => {
|
|
251
|
-
try {
|
|
252
|
-
// Build progress context for progress notifications
|
|
253
|
-
// Extract progressToken from extra._meta (SDK passes RequestHandlerExtra)
|
|
254
|
-
const extraMeta = extra as { _meta?: { progressToken?: string | number } }
|
|
255
|
-
const progressToken = extraMeta?._meta?.progressToken
|
|
256
|
-
const progressContext =
|
|
257
|
-
progressToken !== undefined
|
|
258
|
-
? { server: server.server, progressToken }
|
|
259
|
-
: undefined
|
|
260
|
-
|
|
261
|
-
const result = await callTool(
|
|
262
|
-
tool.name,
|
|
263
|
-
args as Record<string, unknown>,
|
|
264
|
-
db,
|
|
265
|
-
vectorManager,
|
|
266
|
-
github,
|
|
267
|
-
{ defaultProjectNumber },
|
|
268
|
-
progressContext,
|
|
269
|
-
teamDb,
|
|
270
|
-
teamVectorManager
|
|
271
|
-
)
|
|
272
|
-
|
|
273
|
-
// MCP 2025-11-25: If tool has outputSchema, return both:
|
|
274
|
-
// - structuredContent: validated JSON for clients that support it
|
|
275
|
-
// - content: compact text fallback (~15-20% payload reduction per §3.1)
|
|
276
|
-
if (hasOutputSchema) {
|
|
277
|
-
return {
|
|
278
|
-
content: [
|
|
279
|
-
{
|
|
280
|
-
type: 'text' as const,
|
|
281
|
-
text: JSON.stringify(result),
|
|
282
|
-
},
|
|
283
|
-
],
|
|
284
|
-
structuredContent: result as Record<string, unknown>,
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
// Otherwise, return text content
|
|
289
|
-
return {
|
|
290
|
-
content: [
|
|
291
|
-
{
|
|
292
|
-
type: 'text' as const,
|
|
293
|
-
text:
|
|
294
|
-
typeof result === 'string'
|
|
295
|
-
? result
|
|
296
|
-
: JSON.stringify(result, null, 2),
|
|
297
|
-
},
|
|
298
|
-
],
|
|
299
|
-
}
|
|
300
|
-
} catch (error) {
|
|
301
|
-
const errorMessage = error instanceof Error ? error.message : String(error)
|
|
302
|
-
const errorResult = {
|
|
303
|
-
success: false,
|
|
304
|
-
error: errorMessage,
|
|
305
|
-
code: 'INTERNAL_ERROR',
|
|
306
|
-
category: 'internal',
|
|
307
|
-
recoverable: false,
|
|
308
|
-
}
|
|
309
|
-
return {
|
|
310
|
-
content: [
|
|
311
|
-
{
|
|
312
|
-
type: 'text' as const,
|
|
313
|
-
text: JSON.stringify(errorResult, null, 2),
|
|
314
|
-
},
|
|
315
|
-
],
|
|
316
|
-
...(hasOutputSchema ? { structuredContent: errorResult } : {}),
|
|
317
|
-
isError: true,
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
)
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Initialize scheduler (HTTP/SSE only) — must be before handleResourceRead
|
|
325
|
-
// which captures scheduler in its closure.
|
|
326
|
-
let scheduler: Scheduler | null = null
|
|
327
|
-
if (options.scheduler) {
|
|
328
|
-
const hasAnyJob =
|
|
329
|
-
options.scheduler.backupIntervalMinutes > 0 ||
|
|
330
|
-
options.scheduler.vacuumIntervalMinutes > 0 ||
|
|
331
|
-
options.scheduler.rebuildIndexIntervalMinutes > 0
|
|
332
|
-
|
|
333
|
-
if (hasAnyJob && transport === 'stdio') {
|
|
334
|
-
logger.warning(
|
|
335
|
-
'Scheduler options ignored for stdio transport (session is ephemeral). ' +
|
|
336
|
-
'Use HTTP/SSE transport for automated scheduling.',
|
|
337
|
-
{ module: 'Scheduler' }
|
|
338
|
-
)
|
|
339
|
-
} else if (hasAnyJob) {
|
|
340
|
-
scheduler = new Scheduler(options.scheduler, db, vectorManager)
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
// Resource read handler shared by template and static branches (D2 fix)
|
|
345
|
-
const handleResourceRead = async (
|
|
346
|
-
uri: URL,
|
|
347
|
-
mimeType: string
|
|
348
|
-
): Promise<{
|
|
349
|
-
contents: {
|
|
350
|
-
uri: string
|
|
351
|
-
mimeType: string
|
|
352
|
-
text: string
|
|
353
|
-
annotations?: Record<string, unknown>
|
|
354
|
-
}[]
|
|
355
|
-
}> => {
|
|
356
|
-
const activeBriefingConfig: typeof DEFAULT_BRIEFING_CONFIG = {
|
|
357
|
-
...(options.briefingConfig ?? DEFAULT_BRIEFING_CONFIG),
|
|
358
|
-
// Ensure defaultProjectNumber is available to resource handlers
|
|
359
|
-
// (may come via briefingConfig from CLI, or directly from server options)
|
|
360
|
-
defaultProjectNumber:
|
|
361
|
-
options.briefingConfig?.defaultProjectNumber ?? defaultProjectNumber,
|
|
362
|
-
}
|
|
363
|
-
const result = await readResource(
|
|
364
|
-
uri.href,
|
|
365
|
-
db,
|
|
366
|
-
vectorManager,
|
|
367
|
-
filterConfig,
|
|
368
|
-
github,
|
|
369
|
-
scheduler,
|
|
370
|
-
teamDb,
|
|
371
|
-
activeBriefingConfig
|
|
372
|
-
)
|
|
373
|
-
const dataStr =
|
|
374
|
-
typeof result.data === 'string' ? result.data : JSON.stringify(result.data, null, 2)
|
|
375
|
-
return {
|
|
376
|
-
contents: [
|
|
377
|
-
{
|
|
378
|
-
uri: uri.href,
|
|
379
|
-
mimeType,
|
|
380
|
-
text: dataStr,
|
|
381
|
-
...(result.annotations ? { annotations: result.annotations } : {}),
|
|
382
|
-
},
|
|
383
|
-
],
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
// Register resources (reusing resources from instruction generation)
|
|
388
|
-
registerResources(
|
|
389
|
-
server,
|
|
390
|
-
resources as ResourceDefinition[],
|
|
391
|
-
handleResourceRead as ResourceReadHandler
|
|
392
|
-
)
|
|
393
|
-
|
|
394
|
-
// Register prompts (reusing prompts from instruction generation)
|
|
395
|
-
registerPrompts(server, prompts as PromptDefinition[], db)
|
|
396
|
-
|
|
397
|
-
// Start server based on transport
|
|
398
|
-
if (transport === 'stdio') {
|
|
399
|
-
const stdioTransport = new StdioServerTransport()
|
|
400
|
-
await server.connect(stdioTransport)
|
|
401
|
-
logger.info('MCP server started on stdio', { module: 'McpServer' })
|
|
402
|
-
|
|
403
|
-
// Handle shutdown for stdio
|
|
404
|
-
process.on('SIGINT', () => {
|
|
405
|
-
logger.info('Shutting down...', { module: 'McpServer' })
|
|
406
|
-
db.close()
|
|
407
|
-
teamDb?.close()
|
|
408
|
-
process.exit(0)
|
|
409
|
-
})
|
|
410
|
-
} else {
|
|
411
|
-
// HTTP transport
|
|
412
|
-
const port = options.port ?? 3000
|
|
413
|
-
const host = options.host ?? 'localhost'
|
|
414
|
-
const corsRaw = process.env['MCP_CORS_ORIGIN'] ?? '*'
|
|
415
|
-
const corsOrigins = options.corsOrigins ?? corsRaw.split(',').map((s) => s.trim())
|
|
416
|
-
const authToken = options.authToken ?? process.env['MCP_AUTH_TOKEN'] ?? undefined
|
|
417
|
-
|
|
418
|
-
const httpTransport = new HttpTransport({
|
|
419
|
-
port,
|
|
420
|
-
host,
|
|
421
|
-
corsOrigins,
|
|
422
|
-
stateless: options.statelessHttp === true,
|
|
423
|
-
authToken,
|
|
424
|
-
enableHSTS: options.enableHSTS,
|
|
425
|
-
oauthEnabled: options.oauthEnabled,
|
|
426
|
-
oauthIssuer: options.oauthIssuer,
|
|
427
|
-
oauthAudience: options.oauthAudience,
|
|
428
|
-
oauthJwksUri: options.oauthJwksUri,
|
|
429
|
-
oauthClockTolerance: options.oauthClockTolerance,
|
|
430
|
-
})
|
|
431
|
-
|
|
432
|
-
await httpTransport.start(server, scheduler)
|
|
433
|
-
|
|
434
|
-
// Handle shutdown
|
|
435
|
-
process.on('SIGINT', () => {
|
|
436
|
-
void (async () => {
|
|
437
|
-
await httpTransport.stop(scheduler)
|
|
438
|
-
db.close()
|
|
439
|
-
teamDb?.close()
|
|
440
|
-
process.exit(0)
|
|
441
|
-
})()
|
|
442
|
-
})
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
export type { IDatabaseAdapter as SqliteAdapter }
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Server Registration Helpers
|
|
3
|
-
*
|
|
4
|
-
* Extracted from mcp-server.ts to keep it under 500 lines.
|
|
5
|
-
* Handles resource and prompt registration with the MCP SDK.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
9
|
-
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
10
|
-
import type { Variables } from '@modelcontextprotocol/sdk/shared/uriTemplate.js'
|
|
11
|
-
import { z } from 'zod'
|
|
12
|
-
|
|
13
|
-
import type { IDatabaseAdapter } from '../database/core/interfaces.js'
|
|
14
|
-
import { getPrompt } from '../handlers/prompts/index.js'
|
|
15
|
-
|
|
16
|
-
// ============================================================================
|
|
17
|
-
// Types
|
|
18
|
-
// ============================================================================
|
|
19
|
-
|
|
20
|
-
/** Raw resource definition from getResources() */
|
|
21
|
-
export interface ResourceDefinition {
|
|
22
|
-
uri: string
|
|
23
|
-
name: string
|
|
24
|
-
description?: string
|
|
25
|
-
mimeType?: string
|
|
26
|
-
icons?: { src: string; mimeType?: string; sizes?: string[] }[]
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Raw prompt definition from getPrompts() */
|
|
30
|
-
export interface PromptDefinition {
|
|
31
|
-
name: string
|
|
32
|
-
description?: string
|
|
33
|
-
arguments?: { name: string; description: string; required?: boolean }[]
|
|
34
|
-
icons?: { src: string; mimeType?: string; sizes?: string[] }[]
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** Callback that reads a resource by URI and returns structured content. */
|
|
38
|
-
export type ResourceReadHandler = (
|
|
39
|
-
uri: URL,
|
|
40
|
-
mimeType: string
|
|
41
|
-
) => Promise<{
|
|
42
|
-
contents: {
|
|
43
|
-
uri: string
|
|
44
|
-
mimeType: string
|
|
45
|
-
text: string
|
|
46
|
-
annotations?: Record<string, unknown>
|
|
47
|
-
}[]
|
|
48
|
-
}>
|
|
49
|
-
|
|
50
|
-
// ============================================================================
|
|
51
|
-
// Resource Registration
|
|
52
|
-
// ============================================================================
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Register all resources with the MCP server.
|
|
56
|
-
*
|
|
57
|
-
* Handles both static URIs and template URIs (containing `{variable}` patterns).
|
|
58
|
-
*/
|
|
59
|
-
export function registerResources(
|
|
60
|
-
server: McpServer,
|
|
61
|
-
resources: ResourceDefinition[],
|
|
62
|
-
handleResourceRead: ResourceReadHandler
|
|
63
|
-
): void {
|
|
64
|
-
for (const resDef of resources) {
|
|
65
|
-
const mimeType = resDef.mimeType ?? 'application/json'
|
|
66
|
-
const meta = {
|
|
67
|
-
description: resDef.description ?? '',
|
|
68
|
-
mimeType,
|
|
69
|
-
...(resDef.icons ? { icons: resDef.icons } : {}),
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Check if this is a template URI (contains {variable} patterns)
|
|
73
|
-
const isTemplate = resDef.uri.includes('{')
|
|
74
|
-
|
|
75
|
-
if (isTemplate) {
|
|
76
|
-
const template = new ResourceTemplate(resDef.uri, { list: undefined })
|
|
77
|
-
server.registerResource(
|
|
78
|
-
resDef.name,
|
|
79
|
-
template,
|
|
80
|
-
meta,
|
|
81
|
-
async (uri: URL, _variables: Variables) => handleResourceRead(uri, mimeType)
|
|
82
|
-
)
|
|
83
|
-
} else {
|
|
84
|
-
server.registerResource(resDef.name, resDef.uri, meta, async (uri: URL) =>
|
|
85
|
-
handleResourceRead(uri, mimeType)
|
|
86
|
-
)
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// ============================================================================
|
|
92
|
-
// Prompt Registration
|
|
93
|
-
// ============================================================================
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Register all prompts with the MCP server.
|
|
97
|
-
*
|
|
98
|
-
* Builds Zod schemas from prompt argument definitions.
|
|
99
|
-
* Only creates argsSchema when there are actual arguments; passing an empty
|
|
100
|
-
* shape causes the SDK to wrap it in z.object({}) which rejects undefined
|
|
101
|
-
* when the client omits arguments (e.g. session-summary with no args).
|
|
102
|
-
*/
|
|
103
|
-
export function registerPrompts(
|
|
104
|
-
server: McpServer,
|
|
105
|
-
prompts: PromptDefinition[],
|
|
106
|
-
db: IDatabaseAdapter
|
|
107
|
-
): void {
|
|
108
|
-
for (const promptDef of prompts) {
|
|
109
|
-
let argsSchema: Record<string, z.ZodType> | undefined
|
|
110
|
-
if (promptDef.arguments && promptDef.arguments.length > 0) {
|
|
111
|
-
argsSchema = {}
|
|
112
|
-
for (const arg of promptDef.arguments) {
|
|
113
|
-
argsSchema[arg.name] =
|
|
114
|
-
arg.required === true
|
|
115
|
-
? z.string().describe(arg.description)
|
|
116
|
-
: z.string().optional().describe(arg.description)
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
server.registerPrompt(
|
|
121
|
-
promptDef.name,
|
|
122
|
-
{
|
|
123
|
-
description: promptDef.description ?? '',
|
|
124
|
-
...(argsSchema ? { argsSchema } : {}),
|
|
125
|
-
...(promptDef.icons ? { icons: promptDef.icons } : {}),
|
|
126
|
-
},
|
|
127
|
-
(providedArgs) => {
|
|
128
|
-
const args = providedArgs as Record<string, string>
|
|
129
|
-
const promptResult = getPrompt(promptDef.name, args, db)
|
|
130
|
-
// Map to MCP SDK expected format
|
|
131
|
-
const result = {
|
|
132
|
-
messages: promptResult.messages.map((m) => ({
|
|
133
|
-
role: m.role as 'user' | 'assistant',
|
|
134
|
-
content: m.content as { type: 'text'; text: string },
|
|
135
|
-
})),
|
|
136
|
-
}
|
|
137
|
-
return Promise.resolve(result)
|
|
138
|
-
}
|
|
139
|
-
)
|
|
140
|
-
}
|
|
141
|
-
}
|