@maadb/core 0.0.1 → 0.7.10-rc.3
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 +371 -3
- package/dist/architect.d.ts +2 -0
- package/dist/architect.d.ts.map +1 -0
- package/dist/architect.js +273 -0
- package/dist/architect.js.map +1 -0
- package/dist/auth/resolve.d.ts +36 -0
- package/dist/auth/resolve.d.ts.map +1 -0
- package/dist/auth/resolve.js +77 -0
- package/dist/auth/resolve.js.map +1 -0
- package/dist/auth/token-store.d.ts +82 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +464 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/auth/types.d.ts +75 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +15 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/backend/adapter.d.ts +57 -0
- package/dist/backend/adapter.d.ts.map +1 -0
- package/dist/backend/adapter.js +6 -0
- package/dist/backend/adapter.js.map +1 -0
- package/dist/backend/index.d.ts +3 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +2 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/sqlite/index.d.ts +63 -0
- package/dist/backend/sqlite/index.d.ts.map +1 -0
- package/dist/backend/sqlite/index.js +521 -0
- package/dist/backend/sqlite/index.js.map +1 -0
- package/dist/backend/sqlite/schema.d.ts +2 -0
- package/dist/backend/sqlite/schema.d.ts.map +1 -0
- package/dist/backend/sqlite/schema.js +88 -0
- package/dist/backend/sqlite/schema.js.map +1 -0
- package/dist/claude-md.d.ts +2 -0
- package/dist/claude-md.d.ts.map +1 -0
- package/dist/claude-md.js +97 -0
- package/dist/claude-md.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +4 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +39 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +8 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +242 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/discover.d.ts +5 -0
- package/dist/cli/commands/discover.d.ts.map +1 -0
- package/dist/cli/commands/discover.js +48 -0
- package/dist/cli/commands/discover.js.map +1 -0
- package/dist/cli/commands/maintain.d.ts +6 -0
- package/dist/cli/commands/maintain.d.ts.map +1 -0
- package/dist/cli/commands/maintain.js +168 -0
- package/dist/cli/commands/maintain.js.map +1 -0
- package/dist/cli/commands/read.d.ts +7 -0
- package/dist/cli/commands/read.d.ts.map +1 -0
- package/dist/cli/commands/read.js +139 -0
- package/dist/cli/commands/read.js.map +1 -0
- package/dist/cli/commands/write.d.ts +4 -0
- package/dist/cli/commands/write.d.ts.map +1 -0
- package/dist/cli/commands/write.js +99 -0
- package/dist/cli/commands/write.js.map +1 -0
- package/dist/cli/helpers.d.ts +8 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +17 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +296 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -0
- package/dist/engine/audit.d.ts +15 -0
- package/dist/engine/audit.d.ts.map +1 -0
- package/dist/engine/audit.js +42 -0
- package/dist/engine/audit.js.map +1 -0
- package/dist/engine/backup.d.ts +9 -0
- package/dist/engine/backup.d.ts.map +1 -0
- package/dist/engine/backup.js +100 -0
- package/dist/engine/backup.js.map +1 -0
- package/dist/engine/composites.d.ts +6 -0
- package/dist/engine/composites.d.ts.map +1 -0
- package/dist/engine/composites.js +102 -0
- package/dist/engine/composites.js.map +1 -0
- package/dist/engine/context.d.ts +47 -0
- package/dist/engine/context.d.ts.map +1 -0
- package/dist/engine/context.js +55 -0
- package/dist/engine/context.js.map +1 -0
- package/dist/engine/docid-safe.d.ts +8 -0
- package/dist/engine/docid-safe.d.ts.map +1 -0
- package/dist/engine/docid-safe.js +0 -0
- package/dist/engine/docid-safe.js.map +1 -0
- package/dist/engine/helpers.d.ts +8 -0
- package/dist/engine/helpers.d.ts.map +1 -0
- package/dist/engine/helpers.js +102 -0
- package/dist/engine/helpers.js.map +1 -0
- package/dist/engine/index.d.ts +215 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +494 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/indexing.d.ts +14 -0
- package/dist/engine/indexing.d.ts.map +1 -0
- package/dist/engine/indexing.js +225 -0
- package/dist/engine/indexing.js.map +1 -0
- package/dist/engine/journal.d.ts +32 -0
- package/dist/engine/journal.d.ts.map +1 -0
- package/dist/engine/journal.js +111 -0
- package/dist/engine/journal.js.map +1 -0
- package/dist/engine/logger.d.ts +19 -0
- package/dist/engine/logger.d.ts.map +1 -0
- package/dist/engine/logger.js +40 -0
- package/dist/engine/logger.js.map +1 -0
- package/dist/engine/maintenance.d.ts +15 -0
- package/dist/engine/maintenance.d.ts.map +1 -0
- package/dist/engine/maintenance.js +87 -0
- package/dist/engine/maintenance.js.map +1 -0
- package/dist/engine/mutex.d.ts +24 -0
- package/dist/engine/mutex.d.ts.map +1 -0
- package/dist/engine/mutex.js +50 -0
- package/dist/engine/mutex.js.map +1 -0
- package/dist/engine/pathguard.d.ts +16 -0
- package/dist/engine/pathguard.d.ts.map +1 -0
- package/dist/engine/pathguard.js +41 -0
- package/dist/engine/pathguard.js.map +1 -0
- package/dist/engine/reads.d.ts +25 -0
- package/dist/engine/reads.d.ts.map +1 -0
- package/dist/engine/reads.js +904 -0
- package/dist/engine/reads.js.map +1 -0
- package/dist/engine/types.d.ts +396 -0
- package/dist/engine/types.d.ts.map +1 -0
- package/dist/engine/types.js +5 -0
- package/dist/engine/types.js.map +1 -0
- package/dist/engine/writes.d.ts +10 -0
- package/dist/engine/writes.d.ts.map +1 -0
- package/dist/engine/writes.js +606 -0
- package/dist/engine/writes.js.map +1 -0
- package/dist/engine.d.ts +3 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +6 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +17 -0
- package/dist/errors.js.map +1 -0
- package/dist/extractor/fields.d.ts +3 -0
- package/dist/extractor/fields.d.ts.map +1 -0
- package/dist/extractor/fields.js +58 -0
- package/dist/extractor/fields.js.map +1 -0
- package/dist/extractor/index.d.ts +7 -0
- package/dist/extractor/index.d.ts.map +1 -0
- package/dist/extractor/index.js +22 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/extractor/normalizers.d.ts +22 -0
- package/dist/extractor/normalizers.d.ts.map +1 -0
- package/dist/extractor/normalizers.js +250 -0
- package/dist/extractor/normalizers.js.map +1 -0
- package/dist/extractor/objects.d.ts +3 -0
- package/dist/extractor/objects.d.ts.map +1 -0
- package/dist/extractor/objects.js +33 -0
- package/dist/extractor/objects.js.map +1 -0
- package/dist/extractor/relationships.d.ts +3 -0
- package/dist/extractor/relationships.d.ts.map +1 -0
- package/dist/extractor/relationships.js +58 -0
- package/dist/extractor/relationships.js.map +1 -0
- package/dist/git/commit.d.ts +63 -0
- package/dist/git/commit.d.ts.map +1 -0
- package/dist/git/commit.js +161 -0
- package/dist/git/commit.js.map +1 -0
- package/dist/git/diff.d.ts +4 -0
- package/dist/git/diff.d.ts.map +1 -0
- package/dist/git/diff.js +56 -0
- package/dist/git/diff.js.map +1 -0
- package/dist/git/index.d.ts +63 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +151 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/log.d.ts +13 -0
- package/dist/git/log.d.ts.map +1 -0
- package/dist/git/log.js +116 -0
- package/dist/git/log.js.map +1 -0
- package/dist/git/snapshot.d.ts +4 -0
- package/dist/git/snapshot.d.ts.map +1 -0
- package/dist/git/snapshot.js +65 -0
- package/dist/git/snapshot.js.map +1 -0
- package/dist/instance/config.d.ts +19 -0
- package/dist/instance/config.d.ts.map +1 -0
- package/dist/instance/config.js +107 -0
- package/dist/instance/config.js.map +1 -0
- package/dist/instance/pool.d.ts +138 -0
- package/dist/instance/pool.d.ts.map +1 -0
- package/dist/instance/pool.js +335 -0
- package/dist/instance/pool.js.map +1 -0
- package/dist/instance/session.d.ts +140 -0
- package/dist/instance/session.d.ts.map +1 -0
- package/dist/instance/session.js +267 -0
- package/dist/instance/session.js.map +1 -0
- package/dist/logging.d.ts +108 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +120 -0
- package/dist/logging.js.map +1 -0
- package/dist/maad-md.d.ts +11 -0
- package/dist/maad-md.d.ts.map +1 -0
- package/dist/maad-md.js +252 -0
- package/dist/maad-md.js.map +1 -0
- package/dist/mcp/bulk-cap.d.ts +10 -0
- package/dist/mcp/bulk-cap.d.ts.map +1 -0
- package/dist/mcp/bulk-cap.js +37 -0
- package/dist/mcp/bulk-cap.js.map +1 -0
- package/dist/mcp/config.d.ts +18 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +20 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/ctx.d.ts +17 -0
- package/dist/mcp/ctx.d.ts.map +1 -0
- package/dist/mcp/ctx.js +7 -0
- package/dist/mcp/ctx.js.map +1 -0
- package/dist/mcp/guardrails.d.ts +42 -0
- package/dist/mcp/guardrails.d.ts.map +1 -0
- package/dist/mcp/guardrails.js +58 -0
- package/dist/mcp/guardrails.js.map +1 -0
- package/dist/mcp/idempotency.d.ts +69 -0
- package/dist/mcp/idempotency.d.ts.map +1 -0
- package/dist/mcp/idempotency.js +168 -0
- package/dist/mcp/idempotency.js.map +1 -0
- package/dist/mcp/instance-reload.d.ts +23 -0
- package/dist/mcp/instance-reload.d.ts.map +1 -0
- package/dist/mcp/instance-reload.js +126 -0
- package/dist/mcp/instance-reload.js.map +1 -0
- package/dist/mcp/kinds.d.ts +22 -0
- package/dist/mcp/kinds.d.ts.map +1 -0
- package/dist/mcp/kinds.js +112 -0
- package/dist/mcp/kinds.js.map +1 -0
- package/dist/mcp/lifecycle.d.ts +8 -0
- package/dist/mcp/lifecycle.d.ts.map +1 -0
- package/dist/mcp/lifecycle.js +65 -0
- package/dist/mcp/lifecycle.js.map +1 -0
- package/dist/mcp/memory-pressure.d.ts +37 -0
- package/dist/mcp/memory-pressure.d.ts.map +1 -0
- package/dist/mcp/memory-pressure.js +179 -0
- package/dist/mcp/memory-pressure.js.map +1 -0
- package/dist/mcp/notifications.d.ts +87 -0
- package/dist/mcp/notifications.d.ts.map +1 -0
- package/dist/mcp/notifications.js +154 -0
- package/dist/mcp/notifications.js.map +1 -0
- package/dist/mcp/query-depth.d.ts +28 -0
- package/dist/mcp/query-depth.d.ts.map +1 -0
- package/dist/mcp/query-depth.js +43 -0
- package/dist/mcp/query-depth.js.map +1 -0
- package/dist/mcp/rate-limit.d.ts +60 -0
- package/dist/mcp/rate-limit.d.ts.map +1 -0
- package/dist/mcp/rate-limit.js +203 -0
- package/dist/mcp/rate-limit.js.map +1 -0
- package/dist/mcp/reload-signal.d.ts +13 -0
- package/dist/mcp/reload-signal.d.ts.map +1 -0
- package/dist/mcp/reload-signal.js +68 -0
- package/dist/mcp/reload-signal.js.map +1 -0
- package/dist/mcp/response.d.ts +109 -0
- package/dist/mcp/response.d.ts.map +1 -0
- package/dist/mcp/response.js +132 -0
- package/dist/mcp/response.js.map +1 -0
- package/dist/mcp/roles.d.ts +7 -0
- package/dist/mcp/roles.d.ts.map +1 -0
- package/dist/mcp/roles.js +57 -0
- package/dist/mcp/roles.js.map +1 -0
- package/dist/mcp/server.d.ts +33 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +252 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/shutdown.d.ts +32 -0
- package/dist/mcp/shutdown.d.ts.map +1 -0
- package/dist/mcp/shutdown.js +130 -0
- package/dist/mcp/shutdown.js.map +1 -0
- package/dist/mcp/tools/audit.d.ts +4 -0
- package/dist/mcp/tools/audit.d.ts.map +1 -0
- package/dist/mcp/tools/audit.js +45 -0
- package/dist/mcp/tools/audit.js.map +1 -0
- package/dist/mcp/tools/auth.d.ts +4 -0
- package/dist/mcp/tools/auth.d.ts.map +1 -0
- package/dist/mcp/tools/auth.js +181 -0
- package/dist/mcp/tools/auth.js.map +1 -0
- package/dist/mcp/tools/backup.d.ts +4 -0
- package/dist/mcp/tools/backup.d.ts.map +1 -0
- package/dist/mcp/tools/backup.js +52 -0
- package/dist/mcp/tools/backup.js.map +1 -0
- package/dist/mcp/tools/discover.d.ts +4 -0
- package/dist/mcp/tools/discover.d.ts.map +1 -0
- package/dist/mcp/tools/discover.js +83 -0
- package/dist/mcp/tools/discover.js.map +1 -0
- package/dist/mcp/tools/instance.d.ts +15 -0
- package/dist/mcp/tools/instance.d.ts.map +1 -0
- package/dist/mcp/tools/instance.js +207 -0
- package/dist/mcp/tools/instance.js.map +1 -0
- package/dist/mcp/tools/maintain.d.ts +4 -0
- package/dist/mcp/tools/maintain.d.ts.map +1 -0
- package/dist/mcp/tools/maintain.js +123 -0
- package/dist/mcp/tools/maintain.js.map +1 -0
- package/dist/mcp/tools/read.d.ts +4 -0
- package/dist/mcp/tools/read.d.ts.map +1 -0
- package/dist/mcp/tools/read.js +304 -0
- package/dist/mcp/tools/read.js.map +1 -0
- package/dist/mcp/tools/write.d.ts +4 -0
- package/dist/mcp/tools/write.d.ts.map +1 -0
- package/dist/mcp/tools/write.js +342 -0
- package/dist/mcp/tools/write.js.map +1 -0
- package/dist/mcp/transport/auth.d.ts +41 -0
- package/dist/mcp/transport/auth.d.ts.map +1 -0
- package/dist/mcp/transport/auth.js +115 -0
- package/dist/mcp/transport/auth.js.map +1 -0
- package/dist/mcp/transport/http.d.ts +62 -0
- package/dist/mcp/transport/http.d.ts.map +1 -0
- package/dist/mcp/transport/http.js +357 -0
- package/dist/mcp/transport/http.js.map +1 -0
- package/dist/mcp/transport/pin.d.ts +15 -0
- package/dist/mcp/transport/pin.d.ts.map +1 -0
- package/dist/mcp/transport/pin.js +71 -0
- package/dist/mcp/transport/pin.js.map +1 -0
- package/dist/mcp/transport/telemetry.d.ts +79 -0
- package/dist/mcp/transport/telemetry.d.ts.map +1 -0
- package/dist/mcp/transport/telemetry.js +97 -0
- package/dist/mcp/transport/telemetry.js.map +1 -0
- package/dist/mcp/with-session.d.ts +26 -0
- package/dist/mcp/with-session.d.ts.map +1 -0
- package/dist/mcp/with-session.js +275 -0
- package/dist/mcp/with-session.js.map +1 -0
- package/dist/parser/annotations.d.ts +3 -0
- package/dist/parser/annotations.d.ts.map +1 -0
- package/dist/parser/annotations.js +41 -0
- package/dist/parser/annotations.js.map +1 -0
- package/dist/parser/blocks.d.ts +3 -0
- package/dist/parser/blocks.d.ts.map +1 -0
- package/dist/parser/blocks.js +101 -0
- package/dist/parser/blocks.js.map +1 -0
- package/dist/parser/frontmatter.d.ts +9 -0
- package/dist/parser/frontmatter.d.ts.map +1 -0
- package/dist/parser/frontmatter.js +33 -0
- package/dist/parser/frontmatter.js.map +1 -0
- package/dist/parser/index.d.ts +11 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +54 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/matter.d.ts +3 -0
- package/dist/parser/matter.d.ts.map +1 -0
- package/dist/parser/matter.js +32 -0
- package/dist/parser/matter.js.map +1 -0
- package/dist/parser/tags.d.ts +3 -0
- package/dist/parser/tags.d.ts.map +1 -0
- package/dist/parser/tags.js +32 -0
- package/dist/parser/tags.js.map +1 -0
- package/dist/parser/verbatim.d.ts +4 -0
- package/dist/parser/verbatim.d.ts.map +1 -0
- package/dist/parser/verbatim.js +121 -0
- package/dist/parser/verbatim.js.map +1 -0
- package/dist/parser/yaml-profile.d.ts +4 -0
- package/dist/parser/yaml-profile.d.ts.map +1 -0
- package/dist/parser/yaml-profile.js +73 -0
- package/dist/parser/yaml-profile.js.map +1 -0
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +2 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/loader.d.ts +4 -0
- package/dist/registry/loader.d.ts.map +1 -0
- package/dist/registry/loader.js +147 -0
- package/dist/registry/loader.js.map +1 -0
- package/dist/registry/types.d.ts +2 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +5 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/scanner.d.ts +57 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +223 -0
- package/dist/scanner.js.map +1 -0
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +3 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/loader.d.ts +4 -0
- package/dist/schema/loader.d.ts.map +1 -0
- package/dist/schema/loader.js +303 -0
- package/dist/schema/loader.js.map +1 -0
- package/dist/schema/precision.d.ts +6 -0
- package/dist/schema/precision.d.ts.map +1 -0
- package/dist/schema/precision.js +59 -0
- package/dist/schema/precision.js.map +1 -0
- package/dist/schema/validator.d.ts +21 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +200 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/schema-md.d.ts +8 -0
- package/dist/schema-md.d.ts.map +1 -0
- package/dist/schema-md.js +98 -0
- package/dist/schema-md.js.map +1 -0
- package/dist/skill-files.d.ts +3 -0
- package/dist/skill-files.d.ts.map +1 -0
- package/dist/skill-files.js +362 -0
- package/dist/skill-files.js.map +1 -0
- package/dist/skills-scaffold.d.ts +10 -0
- package/dist/skills-scaffold.d.ts.map +1 -0
- package/dist/skills-scaffold.js +52 -0
- package/dist/skills-scaffold.js.map +1 -0
- package/dist/types.d.ts +309 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +111 -0
- package/dist/types.js.map +1 -0
- package/dist/writer/index.d.ts +7 -0
- package/dist/writer/index.d.ts.map +1 -0
- package/dist/writer/index.js +32 -0
- package/dist/writer/index.js.map +1 -0
- package/dist/writer/serializer.d.ts +4 -0
- package/dist/writer/serializer.d.ts.map +1 -0
- package/dist/writer/serializer.js +103 -0
- package/dist/writer/serializer.js.map +1 -0
- package/dist/writer/template.d.ts +3 -0
- package/dist/writer/template.d.ts.map +1 -0
- package/dist/writer/template.js +27 -0
- package/dist/writer/template.js.map +1 -0
- package/package.json +59 -7
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Admin MCP auth tools — 0.7.0 Scoped Auth & Identity (P3c)
|
|
3
|
+
//
|
|
4
|
+
// maad_issue_token — issue a new token; returns plaintext ONCE + record
|
|
5
|
+
// maad_revoke_token — mark a token revoked; returns record
|
|
6
|
+
// maad_rotate_token — revoke + reissue with preserved caps; returns plaintext + record
|
|
7
|
+
// maad_list_tokens — list registry entries (no hash)
|
|
8
|
+
// maad_show_token — fetch one record by id (no hash)
|
|
9
|
+
//
|
|
10
|
+
// All admin-only and engine-less (same pattern as maad_instance_reload and
|
|
11
|
+
// maad_subscriptions). Refuse if the instance has no token registry (stdio
|
|
12
|
+
// / synthetic). Role gate: admin on every project in the session binding.
|
|
13
|
+
// ============================================================================
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { successResponse, errorResponse } from '../response.js';
|
|
16
|
+
import { resolveSessionId } from '../../instance/session.js';
|
|
17
|
+
import { roleSatisfies } from '../roles.js';
|
|
18
|
+
import { maadError } from '../../errors.js';
|
|
19
|
+
import { tokenId as toTokenId } from '../../auth/types.js';
|
|
20
|
+
const ROLE_ENUM = z.enum(['reader', 'writer', 'admin']);
|
|
21
|
+
/**
|
|
22
|
+
* Inline admin role check — same pattern as maad_instance_reload. Engine-less
|
|
23
|
+
* tools bypass withEngine's role gate, so we enforce here. Requires admin
|
|
24
|
+
* effective role on EVERY project in the session's binding (least privilege,
|
|
25
|
+
* since token ops affect the instance-wide registry).
|
|
26
|
+
*/
|
|
27
|
+
function requireAdminEverywhere(ctx, sessionId) {
|
|
28
|
+
const state = ctx.sessions.get(sessionId);
|
|
29
|
+
if (!state || state.mode === null) {
|
|
30
|
+
return errorResponse([maadError('SESSION_UNBOUND', 'Session is not bound. Call maad_use_project(s) before admin auth tools.')]);
|
|
31
|
+
}
|
|
32
|
+
for (const [projectName, role] of state.effectiveRoles) {
|
|
33
|
+
if (!roleSatisfies(role, 'admin')) {
|
|
34
|
+
return errorResponse([maadError('INSUFFICIENT_ROLE', `admin auth tools require admin on every project in the session binding; session has "${role}" on "${projectName}".`)]);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
function requireTokenStore(ctx) {
|
|
40
|
+
if (ctx.tokens === null) {
|
|
41
|
+
return errorResponse([maadError('TOKENS_FILE_MISSING', 'Token registry is not available — this MCP instance runs in stdio/synthetic mode with no tokens.yaml. Admin auth tools require --instance with a file-mode registry.')]);
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/** Scrub `hash` from a record before returning to clients — they never need it. */
|
|
46
|
+
function sanitize(record) {
|
|
47
|
+
const { hash, ...rest } = record;
|
|
48
|
+
void hash;
|
|
49
|
+
return rest;
|
|
50
|
+
}
|
|
51
|
+
export function register(server, ctx) {
|
|
52
|
+
server.registerTool('maad_issue_token', {
|
|
53
|
+
description: 'Issue a new auth token. Returns plaintext ONCE plus record metadata — plaintext is never recoverable after. Admin on every bound project required.',
|
|
54
|
+
inputSchema: z.object({
|
|
55
|
+
role: ROLE_ENUM.describe('Token\'s global role (capped by per-project overrides and instance project ceiling)'),
|
|
56
|
+
projects: z.array(z.object({
|
|
57
|
+
name: z.string().describe('Project name or "*" wildcard'),
|
|
58
|
+
role: ROLE_ENUM.optional().describe('Optional per-project role downgrade (never exceeds global)'),
|
|
59
|
+
})).describe('Allowlist. Wildcard `*` matches every project at the token\'s global role.'),
|
|
60
|
+
name: z.string().optional().describe('Human label (e.g. "brain-app-gateway")'),
|
|
61
|
+
agentId: z.string().optional().describe('Ref -> agent for identity attribution'),
|
|
62
|
+
userId: z.string().optional().describe('Ref -> user when token represents a human'),
|
|
63
|
+
expiresAt: z.string().optional().describe('ISO 8601 expiry timestamp'),
|
|
64
|
+
}),
|
|
65
|
+
}, async (args, extra) => {
|
|
66
|
+
const storeErr = requireTokenStore(ctx);
|
|
67
|
+
if (storeErr)
|
|
68
|
+
return storeErr;
|
|
69
|
+
const sid = resolveSessionId(extra);
|
|
70
|
+
const roleErr = requireAdminEverywhere(ctx, sid);
|
|
71
|
+
if (roleErr)
|
|
72
|
+
return roleErr;
|
|
73
|
+
const spec = {
|
|
74
|
+
role: args.role,
|
|
75
|
+
projects: args.projects.map(p => {
|
|
76
|
+
const cap = { name: p.name };
|
|
77
|
+
if (p.role !== undefined)
|
|
78
|
+
cap.role = p.role;
|
|
79
|
+
return cap;
|
|
80
|
+
}),
|
|
81
|
+
};
|
|
82
|
+
if (args.name !== undefined)
|
|
83
|
+
spec.name = args.name;
|
|
84
|
+
if (args.agentId !== undefined)
|
|
85
|
+
spec.agentId = args.agentId;
|
|
86
|
+
if (args.userId !== undefined)
|
|
87
|
+
spec.userId = args.userId;
|
|
88
|
+
if (args.expiresAt !== undefined)
|
|
89
|
+
spec.expiresAt = args.expiresAt;
|
|
90
|
+
const result = await ctx.tokens.issue(spec);
|
|
91
|
+
if (!result.ok)
|
|
92
|
+
return errorResponse(result.errors);
|
|
93
|
+
return successResponse({
|
|
94
|
+
plaintext: result.value.plaintext,
|
|
95
|
+
record: sanitize(result.value.record),
|
|
96
|
+
warning: 'Store the plaintext now — it will not be returned again.',
|
|
97
|
+
}, 'maad_issue_token');
|
|
98
|
+
});
|
|
99
|
+
server.registerTool('maad_revoke_token', {
|
|
100
|
+
description: 'Revoke a token by its id. Idempotent. Admin on every bound project required.',
|
|
101
|
+
inputSchema: z.object({
|
|
102
|
+
id: z.string().describe('Token id (tok-xxx)'),
|
|
103
|
+
}),
|
|
104
|
+
}, async (args, extra) => {
|
|
105
|
+
const storeErr = requireTokenStore(ctx);
|
|
106
|
+
if (storeErr)
|
|
107
|
+
return storeErr;
|
|
108
|
+
const sid = resolveSessionId(extra);
|
|
109
|
+
const roleErr = requireAdminEverywhere(ctx, sid);
|
|
110
|
+
if (roleErr)
|
|
111
|
+
return roleErr;
|
|
112
|
+
const result = await ctx.tokens.revoke(toTokenId(args.id));
|
|
113
|
+
if (!result.ok)
|
|
114
|
+
return errorResponse(result.errors);
|
|
115
|
+
return successResponse({ record: sanitize(result.value) }, 'maad_revoke_token');
|
|
116
|
+
});
|
|
117
|
+
server.registerTool('maad_rotate_token', {
|
|
118
|
+
description: 'Revoke an existing token and issue a new one with the same capabilities. Returns new plaintext ONCE. Admin on every bound project required.',
|
|
119
|
+
inputSchema: z.object({
|
|
120
|
+
id: z.string().describe('Token id to rotate (tok-xxx)'),
|
|
121
|
+
}),
|
|
122
|
+
}, async (args, extra) => {
|
|
123
|
+
const storeErr = requireTokenStore(ctx);
|
|
124
|
+
if (storeErr)
|
|
125
|
+
return storeErr;
|
|
126
|
+
const sid = resolveSessionId(extra);
|
|
127
|
+
const roleErr = requireAdminEverywhere(ctx, sid);
|
|
128
|
+
if (roleErr)
|
|
129
|
+
return roleErr;
|
|
130
|
+
const result = await ctx.tokens.rotate(toTokenId(args.id));
|
|
131
|
+
if (!result.ok)
|
|
132
|
+
return errorResponse(result.errors);
|
|
133
|
+
return successResponse({
|
|
134
|
+
plaintext: result.value.plaintext,
|
|
135
|
+
record: sanitize(result.value.record),
|
|
136
|
+
warning: 'Store the new plaintext now — old token revoked, new plaintext will not be returned again.',
|
|
137
|
+
}, 'maad_rotate_token');
|
|
138
|
+
});
|
|
139
|
+
server.registerTool('maad_list_tokens', {
|
|
140
|
+
description: 'List all tokens in the registry. Active tokens by default; pass includeRevoked:true for full history. Admin on every bound project required.',
|
|
141
|
+
inputSchema: z.object({
|
|
142
|
+
includeRevoked: z.boolean().optional().describe('Include revoked tokens in the response'),
|
|
143
|
+
}),
|
|
144
|
+
}, async (args, extra) => {
|
|
145
|
+
const storeErr = requireTokenStore(ctx);
|
|
146
|
+
if (storeErr)
|
|
147
|
+
return storeErr;
|
|
148
|
+
const sid = resolveSessionId(extra);
|
|
149
|
+
const roleErr = requireAdminEverywhere(ctx, sid);
|
|
150
|
+
if (roleErr)
|
|
151
|
+
return roleErr;
|
|
152
|
+
const all = ctx.tokens.list();
|
|
153
|
+
const filtered = args.includeRevoked === true ? all : all.filter(r => r.revokedAt === undefined);
|
|
154
|
+
return successResponse({
|
|
155
|
+
tokens: filtered.map(sanitize),
|
|
156
|
+
total: filtered.length,
|
|
157
|
+
activeCount: ctx.tokens.activeCount(),
|
|
158
|
+
}, 'maad_list_tokens');
|
|
159
|
+
});
|
|
160
|
+
server.registerTool('maad_show_token', {
|
|
161
|
+
description: 'Fetch a single token record by id. Hash is never returned. Admin on every bound project required.',
|
|
162
|
+
inputSchema: z.object({
|
|
163
|
+
id: z.string().describe('Token id (tok-xxx)'),
|
|
164
|
+
}),
|
|
165
|
+
}, async (args, extra) => {
|
|
166
|
+
const storeErr = requireTokenStore(ctx);
|
|
167
|
+
if (storeErr)
|
|
168
|
+
return storeErr;
|
|
169
|
+
const sid = resolveSessionId(extra);
|
|
170
|
+
const roleErr = requireAdminEverywhere(ctx, sid);
|
|
171
|
+
if (roleErr)
|
|
172
|
+
return roleErr;
|
|
173
|
+
const record = ctx.tokens.lookupById(toTokenId(args.id));
|
|
174
|
+
if (!record) {
|
|
175
|
+
return errorResponse([maadError('TOKEN_NOT_FOUND', `No token with id ${args.id}`)]);
|
|
176
|
+
}
|
|
177
|
+
return successResponse({ record: sanitize(record) }, 'maad_show_token');
|
|
178
|
+
});
|
|
179
|
+
return 5;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/mcp/tools/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/backup.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CA4CpE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// 0.7.10 — maad_backup MCP tool. Admin-tier, write-kind (mutates git refs).
|
|
3
|
+
//
|
|
4
|
+
// Three modes in one tool (per spec lock):
|
|
5
|
+
// create — annotated tag on HEAD, returns { tag, sha, message, createdAt }
|
|
6
|
+
// list — every maad-snapshot-* tag, optional since: ISO8601 filter
|
|
7
|
+
// delete — drop a maad-snapshot-* tag (refuses other tags)
|
|
8
|
+
//
|
|
9
|
+
// No confirm contract — tag operations don't destroy underlying commits. The
|
|
10
|
+
// explicit mode arg + named tag is the intent gate.
|
|
11
|
+
// ============================================================================
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { resultToResponse } from '../response.js';
|
|
14
|
+
import { withEngine } from '../with-session.js';
|
|
15
|
+
export function register(server, ctx) {
|
|
16
|
+
server.registerTool('maad_backup', {
|
|
17
|
+
description: 'Create / list / delete named recovery anchors via annotated git tags. Tag format: maad-snapshot-YYYY-MM-DD-HHMM[-label] (UTC). Defaults to mode: "create" so the common case is a one-arg call. delete only operates on maad-snapshot-* tags; non-snapshot tags are refused. Underlying commits are never touched — deleting a tag just drops the label.',
|
|
18
|
+
inputSchema: z.object({
|
|
19
|
+
mode: z.enum(['create', 'list', 'delete']).optional().describe('Operation mode (default: "create")'),
|
|
20
|
+
label: z.string().optional().describe('create only — operator-supplied suffix, sanitized to [a-z0-9-] capped at 32 chars'),
|
|
21
|
+
message: z.string().optional().describe('create only — annotated tag message (defaults to "MAADB snapshot at <sha> (\'<branch>\')")'),
|
|
22
|
+
tag: z.string().optional().describe('delete only — exact tag name to remove'),
|
|
23
|
+
since: z.string().optional().describe('list only — ISO8601 timestamp; return only tags created at or after this point'),
|
|
24
|
+
project: z.string().optional().describe('Project name (multi-project mode only)'),
|
|
25
|
+
}),
|
|
26
|
+
}, async (args, extra) => withEngine(ctx, extra, 'maad_backup', args, async ({ engine }) => {
|
|
27
|
+
const mode = args.mode ?? 'create';
|
|
28
|
+
if (mode === 'create') {
|
|
29
|
+
const opts = {};
|
|
30
|
+
if (args.label !== undefined)
|
|
31
|
+
opts.label = args.label;
|
|
32
|
+
if (args.message !== undefined)
|
|
33
|
+
opts.message = args.message;
|
|
34
|
+
return resultToResponse(await engine.backupCreate(opts), 'maad_backup');
|
|
35
|
+
}
|
|
36
|
+
if (mode === 'list') {
|
|
37
|
+
const opts = {};
|
|
38
|
+
if (args.since !== undefined)
|
|
39
|
+
opts.since = args.since;
|
|
40
|
+
return resultToResponse(await engine.backupList(opts), 'maad_backup');
|
|
41
|
+
}
|
|
42
|
+
if (mode === 'delete') {
|
|
43
|
+
if (!args.tag) {
|
|
44
|
+
return resultToResponse({ ok: false, errors: [{ code: 'INVALID_ARGS', message: 'delete mode requires tag' }] }, 'maad_backup');
|
|
45
|
+
}
|
|
46
|
+
return resultToResponse(await engine.backupDelete(args.tag), 'maad_backup');
|
|
47
|
+
}
|
|
48
|
+
return resultToResponse({ ok: false, errors: [{ code: 'INVALID_ARGS', message: 'mode must be "create", "list", or "delete"' }] }, 'maad_backup');
|
|
49
|
+
}));
|
|
50
|
+
return 1;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../src/mcp/tools/backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/discover.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CA8EpE"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Discover tools — maad_scan, maad_summary, maad_describe
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { scanFile, scanDirectory } from '../../scanner.js';
|
|
7
|
+
import { successResponse, errorResponse, getProvenanceMode } from '../response.js';
|
|
8
|
+
import { isContainedIn } from '../../engine/pathguard.js';
|
|
9
|
+
import { withEngine } from '../with-session.js';
|
|
10
|
+
export function register(server, ctx) {
|
|
11
|
+
server.registerTool('maad_scan', {
|
|
12
|
+
description: 'Analyze raw markdown structure. Works without registry. Use for onboarding new files. Pass a file path for detailed analysis or a directory for corpus-level patterns.',
|
|
13
|
+
inputSchema: z.object({
|
|
14
|
+
path: z.string().describe('File or directory path to scan (relative to project root)'),
|
|
15
|
+
project: z.string().optional().describe('Project name (multi-project mode only)'),
|
|
16
|
+
}),
|
|
17
|
+
}, async (args, extra) => withEngine(ctx, extra, 'maad_scan', args, async ({ projectRoot }) => {
|
|
18
|
+
const absTarget = path.resolve(projectRoot, args.path);
|
|
19
|
+
if (!isContainedIn(absTarget, projectRoot)) {
|
|
20
|
+
return errorResponse([{ code: 'PATH_OUTSIDE_PROJECT', message: `Scan path must be within the project root: ${args.path}` }]);
|
|
21
|
+
}
|
|
22
|
+
const { statSync } = await import('node:fs');
|
|
23
|
+
let stat;
|
|
24
|
+
try {
|
|
25
|
+
stat = statSync(absTarget);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return errorResponse([{ code: 'PATH_NOT_FOUND', message: `Not found: ${args.path}` }]);
|
|
29
|
+
}
|
|
30
|
+
if (stat.isFile()) {
|
|
31
|
+
return successResponse(await scanFile(absTarget));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return successResponse(await scanDirectory(absTarget));
|
|
35
|
+
}
|
|
36
|
+
}));
|
|
37
|
+
server.registerTool('maad_summary', {
|
|
38
|
+
description: 'Lean project snapshot for session bootstrapping. Returns types, counts, sample IDs, totals, warnings. Call maad_describe for subtype inventory detail.',
|
|
39
|
+
inputSchema: z.object({
|
|
40
|
+
project: z.string().optional().describe('Project name (multi-project mode only)'),
|
|
41
|
+
}),
|
|
42
|
+
}, async (args, extra) => withEngine(ctx, extra, 'maad_summary', args, ({ engine }) => {
|
|
43
|
+
const summary = engine.summary();
|
|
44
|
+
const provMode = getProvenanceMode();
|
|
45
|
+
if (provMode === 'off') {
|
|
46
|
+
return successResponse(summary, 'maad_summary');
|
|
47
|
+
}
|
|
48
|
+
const provenanceInstructions = provMode === 'detail'
|
|
49
|
+
? {
|
|
50
|
+
mode: 'detail',
|
|
51
|
+
instructions: [
|
|
52
|
+
'Tag every data value in your responses with its source:',
|
|
53
|
+
'[T:<tool_name>] = from a specific MAAD tool (e.g. [T:maad_get])',
|
|
54
|
+
'[R] = from memory/recall (unverified)',
|
|
55
|
+
'[R*] = inferred/derived — not directly stated in any source',
|
|
56
|
+
'When mixing sources in a table, add a source column.',
|
|
57
|
+
'If joins require N+1 calls and you skip them, disclose which values were recalled.',
|
|
58
|
+
'Never present recalled data with the same confidence as tool-verified data.',
|
|
59
|
+
],
|
|
60
|
+
}
|
|
61
|
+
: {
|
|
62
|
+
mode: 'on',
|
|
63
|
+
instructions: [
|
|
64
|
+
'Tag data sources in responses:',
|
|
65
|
+
'[T] = from a MAAD tool call (verified)',
|
|
66
|
+
'[R] = from memory/recall (unverified)',
|
|
67
|
+
'When mixing sources in a table, add a source column or footnote.',
|
|
68
|
+
'Never present recalled data with the same confidence as tool-verified data.',
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
return successResponse({ ...summary, provenance: provenanceInstructions }, 'maad_summary');
|
|
72
|
+
}));
|
|
73
|
+
server.registerTool('maad_describe', {
|
|
74
|
+
description: 'Returns registry types, extraction primitives, document counts, and subtype inventory (deep detail; maad_summary is the lean orientation call).',
|
|
75
|
+
inputSchema: z.object({
|
|
76
|
+
project: z.string().optional().describe('Project name (multi-project mode only)'),
|
|
77
|
+
}),
|
|
78
|
+
}, async (args, extra) => withEngine(ctx, extra, 'maad_describe', args, ({ engine }) => {
|
|
79
|
+
return successResponse(engine.describe());
|
|
80
|
+
}));
|
|
81
|
+
return 3;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/mcp/tools/discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { InstanceCtx } from '../ctx.js';
|
|
3
|
+
export declare function register(server: McpServer, ctx: InstanceCtx): number;
|
|
4
|
+
/**
|
|
5
|
+
* Registers the admin-only `maad_instance_reload` tool separately from the
|
|
6
|
+
* base instance tools. Called regardless of instance source so synthetic
|
|
7
|
+
* instances can surface a clear INSTANCE_RELOAD_SYNTHETIC error rather than
|
|
8
|
+
* an opaque "unknown tool" response.
|
|
9
|
+
*
|
|
10
|
+
* Role gate lives inside the handler (engine-less tools bypass the `withEngine`
|
|
11
|
+
* role check). Requires admin effective role on EVERY project in the session's
|
|
12
|
+
* binding — least privilege, since reload is instance-wide.
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerReload(server: McpServer, ctx: InstanceCtx): number;
|
|
15
|
+
//# sourceMappingURL=instance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/instance.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAQ7C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CA2IpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CA6D1E"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Instance tools — maad_projects, maad_use_project, maad_use_projects,
|
|
3
|
+
// maad_current_session
|
|
4
|
+
//
|
|
5
|
+
// These four tools operate at the instance level (no project binding required).
|
|
6
|
+
// They let clients discover and bind to projects served by this MCP instance.
|
|
7
|
+
// ============================================================================
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { successResponse, errorResponse } from '../response.js';
|
|
10
|
+
import { resolveSessionId } from '../../instance/session.js';
|
|
11
|
+
import { performInstanceReload } from '../instance-reload.js';
|
|
12
|
+
import { roleSatisfies } from '../roles.js';
|
|
13
|
+
import { maadError } from '../../errors.js';
|
|
14
|
+
import { collectSubscriptions } from '../notifications.js';
|
|
15
|
+
const ROLE_ENUM = z.enum(['reader', 'writer', 'admin']);
|
|
16
|
+
export function register(server, ctx) {
|
|
17
|
+
server.registerTool('maad_projects', {
|
|
18
|
+
description: 'Lists projects declared in this MCP instance. Returns name, description, configured role, and whether the current session has access. Call this before maad_use_project.',
|
|
19
|
+
inputSchema: z.object({}),
|
|
20
|
+
}, async (_args, extra) => {
|
|
21
|
+
const sessionId = resolveSessionId(extra);
|
|
22
|
+
const state = ctx.sessions.get(sessionId);
|
|
23
|
+
const projects = ctx.instance.projects.map((p) => ({
|
|
24
|
+
name: p.name,
|
|
25
|
+
description: p.description ?? null,
|
|
26
|
+
role: p.role,
|
|
27
|
+
accessible: state?.mode === null || !state
|
|
28
|
+
? null
|
|
29
|
+
: state.mode === 'single'
|
|
30
|
+
? state.activeProject === p.name
|
|
31
|
+
: (state.whitelist ?? []).includes(p.name),
|
|
32
|
+
}));
|
|
33
|
+
return successResponse({
|
|
34
|
+
instance: ctx.instance.name,
|
|
35
|
+
source: ctx.instance.source,
|
|
36
|
+
projects,
|
|
37
|
+
sessionBound: state?.mode !== null && state !== undefined,
|
|
38
|
+
}, 'maad_projects');
|
|
39
|
+
});
|
|
40
|
+
server.registerTool('maad_use_project', {
|
|
41
|
+
description: 'Binds the current session to a single project. Every subsequent tool call routes to this project. Optional `as` downgrades the session role below the project\'s configured role (e.g. bind an admin project in reader mode for safety). Once bound, a session cannot rebind — disconnect and reconnect instead.',
|
|
42
|
+
inputSchema: z.object({
|
|
43
|
+
name: z.string().describe('Project name (from maad_projects)'),
|
|
44
|
+
as: ROLE_ENUM.optional().describe('Optional role downgrade. Cannot exceed the project\'s configured role.'),
|
|
45
|
+
}),
|
|
46
|
+
}, async (args, extra) => {
|
|
47
|
+
const sessionId = resolveSessionId(extra);
|
|
48
|
+
if (!ctx.sessions.get(sessionId))
|
|
49
|
+
ctx.sessions.create(sessionId);
|
|
50
|
+
const opts = args.as ? { as: args.as } : {};
|
|
51
|
+
const result = ctx.sessions.bindSingle(sessionId, args.name, opts);
|
|
52
|
+
if (!result.ok)
|
|
53
|
+
return errorResponse(result.errors);
|
|
54
|
+
const state = result.value;
|
|
55
|
+
return successResponse({
|
|
56
|
+
mode: state.mode,
|
|
57
|
+
activeProject: state.activeProject,
|
|
58
|
+
effectiveRole: state.effectiveRoles.get(args.name),
|
|
59
|
+
}, 'maad_use_project');
|
|
60
|
+
});
|
|
61
|
+
server.registerTool('maad_use_projects', {
|
|
62
|
+
description: 'Binds the current session to a whitelist of projects (multi-project mode). Every subsequent tool call must pass `project=<name>` to pick one. Optional `as` downgrades the role uniformly across all listed projects. Once bound, a session cannot rebind.',
|
|
63
|
+
inputSchema: z.object({
|
|
64
|
+
names: z.array(z.string()).min(1).describe('Project names from maad_projects'),
|
|
65
|
+
as: ROLE_ENUM.optional().describe('Optional role downgrade. Cannot exceed any project\'s configured role.'),
|
|
66
|
+
}),
|
|
67
|
+
}, async (args, extra) => {
|
|
68
|
+
const sessionId = resolveSessionId(extra);
|
|
69
|
+
if (!ctx.sessions.get(sessionId))
|
|
70
|
+
ctx.sessions.create(sessionId);
|
|
71
|
+
const opts = args.as ? { as: args.as } : {};
|
|
72
|
+
const result = ctx.sessions.bindMulti(sessionId, args.names, opts);
|
|
73
|
+
if (!result.ok)
|
|
74
|
+
return errorResponse(result.errors);
|
|
75
|
+
const state = result.value;
|
|
76
|
+
const effectiveRoles = {};
|
|
77
|
+
for (const [name, role] of state.effectiveRoles)
|
|
78
|
+
effectiveRoles[name] = role;
|
|
79
|
+
return successResponse({
|
|
80
|
+
mode: state.mode,
|
|
81
|
+
whitelist: state.whitelist,
|
|
82
|
+
effectiveRoles,
|
|
83
|
+
}, 'maad_use_projects');
|
|
84
|
+
});
|
|
85
|
+
server.registerTool('maad_current_session', {
|
|
86
|
+
description: 'Returns the current session state: mode, bound project(s), effective role per project, and binding_source (how the session was bound — client_tool or gateway_pin). Useful for debugging routing issues and detecting pinned sessions.',
|
|
87
|
+
inputSchema: z.object({}),
|
|
88
|
+
}, async (_args, extra) => {
|
|
89
|
+
const sessionId = resolveSessionId(extra);
|
|
90
|
+
const state = ctx.sessions.get(sessionId);
|
|
91
|
+
if (!state) {
|
|
92
|
+
return successResponse({ sessionId, mode: null, binding_source: null, note: 'no session registered yet' }, 'maad_current_session');
|
|
93
|
+
}
|
|
94
|
+
const effectiveRoles = {};
|
|
95
|
+
for (const [name, role] of state.effectiveRoles)
|
|
96
|
+
effectiveRoles[name] = role;
|
|
97
|
+
return successResponse({
|
|
98
|
+
sessionId: state.sessionId,
|
|
99
|
+
mode: state.mode,
|
|
100
|
+
activeProject: state.activeProject ?? null,
|
|
101
|
+
whitelist: state.whitelist ?? null,
|
|
102
|
+
effectiveRoles,
|
|
103
|
+
binding_source: state.bindingSource,
|
|
104
|
+
createdAt: state.createdAt.toISOString(),
|
|
105
|
+
lastActivityAt: state.lastActivityAt.toISOString(),
|
|
106
|
+
subscription: state.subscription
|
|
107
|
+
? { docTypes: state.subscription.docTypes, project: state.subscription.project, createdAt: state.subscription.createdAt.toISOString() }
|
|
108
|
+
: null,
|
|
109
|
+
}, 'maad_current_session');
|
|
110
|
+
});
|
|
111
|
+
server.registerTool('maad_subscribe', {
|
|
112
|
+
description: 'Subscribe the current session to live notifications on durable writes. Optional filters: docTypes (array), project (string). Emits notifications/resources/updated with uri=maad://records/<docId> + extra params. One subscription per session; re-subscribe to replace filter.',
|
|
113
|
+
inputSchema: z.object({
|
|
114
|
+
docTypes: z.array(z.string()).optional().describe('Allowlist of doc types; omit for all types'),
|
|
115
|
+
project: z.string().optional().describe('Restrict to one project; defaults to session\'s bound scope'),
|
|
116
|
+
}),
|
|
117
|
+
}, async (args, extra) => {
|
|
118
|
+
const sessionId = resolveSessionId(extra);
|
|
119
|
+
if (!ctx.sessions.get(sessionId))
|
|
120
|
+
ctx.sessions.create(sessionId);
|
|
121
|
+
const state = ctx.sessions.get(sessionId);
|
|
122
|
+
const docTypes = (args.docTypes && args.docTypes.length > 0) ? args.docTypes : null;
|
|
123
|
+
const project = args.project ?? null;
|
|
124
|
+
state.subscription = { docTypes, project, createdAt: new Date() };
|
|
125
|
+
return successResponse({
|
|
126
|
+
subscribed: true,
|
|
127
|
+
filter: { docTypes, project },
|
|
128
|
+
note: 'Notifications fire only on durable commits. Use maad_changes_since for historical catch-up on reconnect.',
|
|
129
|
+
}, 'maad_subscribe');
|
|
130
|
+
});
|
|
131
|
+
server.registerTool('maad_unsubscribe', {
|
|
132
|
+
description: 'Releases the current session\'s live-update subscription. No-op if not subscribed.',
|
|
133
|
+
inputSchema: z.object({}),
|
|
134
|
+
}, async (_args, extra) => {
|
|
135
|
+
const sessionId = resolveSessionId(extra);
|
|
136
|
+
const state = ctx.sessions.get(sessionId);
|
|
137
|
+
const wasSubscribed = state?.subscription !== undefined;
|
|
138
|
+
if (state)
|
|
139
|
+
delete state.subscription;
|
|
140
|
+
return successResponse({ subscribed: false, wasSubscribed }, 'maad_unsubscribe');
|
|
141
|
+
});
|
|
142
|
+
return 6;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Registers the admin-only `maad_instance_reload` tool separately from the
|
|
146
|
+
* base instance tools. Called regardless of instance source so synthetic
|
|
147
|
+
* instances can surface a clear INSTANCE_RELOAD_SYNTHETIC error rather than
|
|
148
|
+
* an opaque "unknown tool" response.
|
|
149
|
+
*
|
|
150
|
+
* Role gate lives inside the handler (engine-less tools bypass the `withEngine`
|
|
151
|
+
* role check). Requires admin effective role on EVERY project in the session's
|
|
152
|
+
* binding — least privilege, since reload is instance-wide.
|
|
153
|
+
*/
|
|
154
|
+
export function registerReload(server, ctx) {
|
|
155
|
+
server.registerTool('maad_instance_reload', {
|
|
156
|
+
description: 'Reloads instance.yaml from disk. Picks up added projects, evicts removed, cancels bound sessions. Admin on every bound project required. Path/role mutations rejected until 0.9.0.',
|
|
157
|
+
inputSchema: z.object({}),
|
|
158
|
+
}, async (_args, extra) => {
|
|
159
|
+
const sessionId = resolveSessionId(extra);
|
|
160
|
+
const state = ctx.sessions.get(sessionId);
|
|
161
|
+
// Session must be bound before an admin check makes sense.
|
|
162
|
+
if (!state || state.mode === null) {
|
|
163
|
+
return errorResponse([maadError('SESSION_UNBOUND', 'Session is not bound to any project. Call maad_use_project(s) before maad_instance_reload.')]);
|
|
164
|
+
}
|
|
165
|
+
// Admin on EVERY project in the binding. In single mode that's one project;
|
|
166
|
+
// in multi mode it's the whole whitelist. Prevents an operator who only
|
|
167
|
+
// has admin on one subproject from reloading the whole instance and
|
|
168
|
+
// affecting other tenants.
|
|
169
|
+
for (const [projectName, role] of state.effectiveRoles) {
|
|
170
|
+
if (!roleSatisfies(role, 'admin')) {
|
|
171
|
+
return errorResponse([maadError('INSUFFICIENT_ROLE', `maad_instance_reload requires admin on every project in the session binding; session has "${role}" on "${projectName}".`)]);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const result = await performInstanceReload(ctx, 'tool');
|
|
175
|
+
if (!result.ok)
|
|
176
|
+
return errorResponse(result.errors);
|
|
177
|
+
return successResponse({
|
|
178
|
+
source: result.value.source,
|
|
179
|
+
projectsAdded: result.value.projectsAdded,
|
|
180
|
+
projectsRemoved: result.value.projectsRemoved,
|
|
181
|
+
sessionsCancelled: result.value.sessionsCancelled.length,
|
|
182
|
+
sessionsPruned: result.value.sessionsPruned.length,
|
|
183
|
+
durationMs: result.value.durationMs,
|
|
184
|
+
}, 'maad_instance_reload');
|
|
185
|
+
});
|
|
186
|
+
server.registerTool('maad_subscriptions', {
|
|
187
|
+
description: 'Admin tool: returns live-subscription inventory across all sessions as { totalSubscriptions, subscriptions[], byProject, byDocType }. Requires admin on every project in the session binding.',
|
|
188
|
+
inputSchema: z.object({}),
|
|
189
|
+
}, async (_args, extra) => {
|
|
190
|
+
const sessionId = resolveSessionId(extra);
|
|
191
|
+
const callerState = ctx.sessions.get(sessionId);
|
|
192
|
+
if (!callerState || callerState.mode === null) {
|
|
193
|
+
return errorResponse([maadError('SESSION_UNBOUND', 'Session is not bound to any project. Call maad_use_project(s) before maad_subscriptions.')]);
|
|
194
|
+
}
|
|
195
|
+
// Admin on EVERY project in the binding — same model as maad_instance_reload.
|
|
196
|
+
// The tool leaks instance-wide state, so require admin across the caller's full scope.
|
|
197
|
+
for (const [projectName, role] of callerState.effectiveRoles) {
|
|
198
|
+
if (!roleSatisfies(role, 'admin')) {
|
|
199
|
+
return errorResponse([maadError('INSUFFICIENT_ROLE', `maad_subscriptions requires admin on every project in the session binding; session has "${role}" on "${projectName}".`)]);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const inventory = collectSubscriptions(ctx.sessions);
|
|
203
|
+
return successResponse(inventory, 'maad_subscriptions');
|
|
204
|
+
});
|
|
205
|
+
return 2;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../../src/mcp/tools/instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintain.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/maintain.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAK7C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAoHpE"}
|