@lerianstudio/matcher-mcp 1.5.0-beta.2 → 1.5.0-beta.4

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/dist/server.js CHANGED
@@ -113,7 +113,7 @@ function registerTools(server) {
113
113
  registerListOperationsTool(server, index);
114
114
  registerDescribeOperationTool(server, index);
115
115
  // Generic invoke (task 1.2.3): assembles + validates + dispatches any of the
116
- // 168 operations with the caller's relayed token (fail-closed). Shares the
116
+ // 174 operations with the caller's relayed token (fail-closed). Shares the
117
117
  // RFC 9457 → tool-error mapping (toToolError) with the curated surface.
118
118
  registerInvokeTool(server, index);
119
119
  // Curated fee-schedule vertical (task 1.3.2): six typed tools (create/list/
@@ -2,10 +2,10 @@
2
2
  // covers — the registry the drift guard checks against.
3
3
  //
4
4
  // WHY THIS EXISTS
5
- // The server exposes two surfaces over the 168-operation matcher spec:
5
+ // The server exposes two surfaces over the 174-operation matcher spec:
6
6
  // 1. The GENERIC trio (matcher_list_operations / describe / invoke) reads the
7
7
  // spec at runtime, so it tracks the spec automatically. `load.test.ts`
8
- // already pins `index.operations.size === 168` as that side's canary.
8
+ // already pins `index.operations.size === 174` as that side's canary.
9
9
  // 2. The CURATED tools (the ~72 hand-written Zod tools under `src/tools/*/`)
10
10
  // hard-code their own method+path. NOTHING in those tools consults the
11
11
  // spec, and their unit tests assert against the same hard-coded literal —
@@ -153,5 +153,21 @@ export const GENERIC_ONLY_OPERATION_IDS = [
153
153
  // discovery hub (generic-only) — inbound streaming-hub event receiver; signed,
154
154
  // hub-driven delivery, not an operator-initiated action (cf. above).
155
155
  'receiveHubEvent', // POST /v1/discovery/hub/events
156
+ // self-service onboarding (generic-only) — PUBLIC, anonymous, PRE-TENANT
157
+ // routes for the console signup flow. The MCP relay authenticates every call
158
+ // with an already-provisioned tenant token, so "create me a workspace" is not
159
+ // an operator action on this surface (cf. the webhook receivers above).
160
+ 'signup', // POST /v1/signup
161
+ 'signup-verify', // POST /v1/signup/verify
162
+ // PUBLIC pre-login PKCE bootstrap for the console (client id + issuer per
163
+ // workspace slug); browser-facing discovery, not an operator action.
164
+ 'workspace-auth-config', // GET /v1/workspaces/{slug}/auth-config
165
+ // standalone-SaaS Phase 2 control-plane (generic-only) — tenant billing read
166
+ // plus backoffice workspace-lifecycle admin. Straightforward body-less ops
167
+ // nobody has hand-curated a Zod tool for; billing read is tenant-scoped, the
168
+ // admin pair is an internal backoffice surface, not an operator action.
169
+ 'workspace-billing', // GET /v1/workspace/billing
170
+ 'admin-suspend-workspace', // PUT /v1/admin/workspaces/{slug}/suspend
171
+ 'admin-reactivate-workspace', // PUT /v1/admin/workspaces/{slug}/reactivate
156
172
  ];
157
173
  //# sourceMappingURL=curated-operations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"curated-operations.js","sourceRoot":"","sources":["../../src/spec/curated-operations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"curated-operations.js","sourceRoot":"","sources":["../../src/spec/curated-operations.ts"],"names":[],"mappings":"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"}
@@ -224,6 +224,19 @@ components:
224
224
  - createdAt
225
225
  - updatedAt
226
226
  type: object
227
+ AdminWorkspaceResult:
228
+ additionalProperties: false
229
+ properties:
230
+ action:
231
+ description: "The action applied: \"suspended\" or \"reactivated\"."
232
+ type: string
233
+ slug:
234
+ description: The workspace acted on.
235
+ type: string
236
+ required:
237
+ - slug
238
+ - action
239
+ type: object
227
240
  AgeBucketDTO:
228
241
  additionalProperties: false
229
242
  properties:
@@ -6466,6 +6479,43 @@ components:
6466
6479
  - left
6467
6480
  - right
6468
6481
  type: object
6482
+ SignupBody:
6483
+ additionalProperties: false
6484
+ properties:
6485
+ acceptTos:
6486
+ description: Must be true; acceptance is recorded with a timestamp.
6487
+ type: boolean
6488
+ companyName:
6489
+ description: Company/organization name; a URL-safe slug is derived from it.
6490
+ examples:
6491
+ - Acme Payments
6492
+ maxLength: 200
6493
+ type: string
6494
+ email:
6495
+ description: Work email; disposable domains are rejected.
6496
+ examples:
6497
+ - founder@acme.com
6498
+ maxLength: 254
6499
+ type: string
6500
+ password:
6501
+ description: Account password; 12–72 characters with letters and digits. The 72-byte cap is bcrypt's input limit.
6502
+ maxLength: 72
6503
+ type: string
6504
+ required:
6505
+ - email
6506
+ - password
6507
+ - companyName
6508
+ - acceptTos
6509
+ type: object
6510
+ SignupResponse:
6511
+ additionalProperties: false
6512
+ properties:
6513
+ message:
6514
+ description: Human-readable acknowledgement (identical for known and unknown emails).
6515
+ type: string
6516
+ required:
6517
+ - message
6518
+ type: object
6469
6519
  SimulateFeeItem:
6470
6520
  additionalProperties: false
6471
6521
  properties:
@@ -7784,6 +7834,25 @@ components:
7784
7834
  - totalActual
7785
7835
  - netVariance
7786
7836
  type: object
7837
+ VerifyBody:
7838
+ additionalProperties: false
7839
+ properties:
7840
+ token:
7841
+ description: The verification token from the signup email link.
7842
+ maxLength: 512
7843
+ type: string
7844
+ required:
7845
+ - token
7846
+ type: object
7847
+ VerifyResponse:
7848
+ additionalProperties: false
7849
+ properties:
7850
+ message:
7851
+ description: Human-readable verification result.
7852
+ type: string
7853
+ required:
7854
+ - message
7855
+ type: object
7787
7856
  VersionBody:
7788
7857
  additionalProperties: false
7789
7858
  properties:
@@ -7858,6 +7927,45 @@ components:
7858
7927
  - periodStart
7859
7928
  - periodEnd
7860
7929
  type: object
7930
+ WorkspaceAuthConfig:
7931
+ additionalProperties: false
7932
+ properties:
7933
+ clientId:
7934
+ description: OAuth client id of the workspace's console application.
7935
+ type: string
7936
+ issuer:
7937
+ description: Public base URL of the identity provider (the PKCE issuer).
7938
+ type: string
7939
+ organization:
7940
+ description: Identity-provider organization name for the workspace.
7941
+ type: string
7942
+ required:
7943
+ - clientId
7944
+ - organization
7945
+ - issuer
7946
+ type: object
7947
+ WorkspaceBilling:
7948
+ additionalProperties: false
7949
+ properties:
7950
+ billingStatus:
7951
+ description: "Commercial lifecycle: trialing, active, past_due, or suspended."
7952
+ type: string
7953
+ daysRemaining:
7954
+ description: Whole days left in the trial, derived server-side. 0 when there is no trial or it has already ended.
7955
+ format: int64
7956
+ type: integer
7957
+ plan:
7958
+ description: Commercial plan the workspace is on ("free" or a paid tier).
7959
+ type: string
7960
+ trialEndsAt:
7961
+ description: When the free trial ends (UTC). Omitted for a paid plan that never trialed.
7962
+ format: date-time
7963
+ type: string
7964
+ required:
7965
+ - plan
7966
+ - billingStatus
7967
+ - daysRemaining
7968
+ type: object
7861
7969
  securitySchemes:
7862
7970
  BearerAuth:
7863
7971
  bearerFormat: JWT
@@ -7936,6 +8044,68 @@ paths:
7936
8044
  summary: Readiness check
7937
8045
  tags:
7938
8046
  - Health
8047
+ /v1/admin/workspaces/{slug}/reactivate:
8048
+ put:
8049
+ description: "Restores a suspended workspace: persists billing_status=active, re-enables interactive console login at the IdP, reactivates the tenant at the Tenant Manager (best-effort), and evicts the billing edge-gate cache. The target slug comes from the URL path (backoffice operation, workspace admin action). Idempotent. Errors use RFC 9457 problem+json."
8050
+ operationId: admin-reactivate-workspace
8051
+ parameters:
8052
+ - description: Slug of the workspace to act on.
8053
+ in: path
8054
+ name: slug
8055
+ required: true
8056
+ schema:
8057
+ description: Slug of the workspace to act on.
8058
+ maxLength: 255
8059
+ type: string
8060
+ responses:
8061
+ "200":
8062
+ content:
8063
+ application/json:
8064
+ schema:
8065
+ $ref: "#/components/schemas/AdminWorkspaceResult"
8066
+ description: OK
8067
+ default:
8068
+ content:
8069
+ application/problem+json:
8070
+ schema:
8071
+ $ref: "#/components/schemas/Detail"
8072
+ description: Error
8073
+ security:
8074
+ - BearerAuth: []
8075
+ summary: Reactivate a suspended workspace (backoffice)
8076
+ tags:
8077
+ - Onboarding
8078
+ /v1/admin/workspaces/{slug}/suspend:
8079
+ put:
8080
+ description: "Suspends a workspace's commercial access: persists billing_status=suspended (source of truth), cuts interactive console login at the IdP, suspends the tenant's matcher service association at the Tenant Manager (best-effort), and evicts the billing edge-gate cache so API traffic is cut within the gate TTL. The target slug comes from the URL path: this is a backoffice operation gated by the workspace admin action, NOT a tenant-scoped route — the operator acts across workspaces. Idempotent. Errors use RFC 9457 problem+json."
8081
+ operationId: admin-suspend-workspace
8082
+ parameters:
8083
+ - description: Slug of the workspace to act on.
8084
+ in: path
8085
+ name: slug
8086
+ required: true
8087
+ schema:
8088
+ description: Slug of the workspace to act on.
8089
+ maxLength: 255
8090
+ type: string
8091
+ responses:
8092
+ "200":
8093
+ content:
8094
+ application/json:
8095
+ schema:
8096
+ $ref: "#/components/schemas/AdminWorkspaceResult"
8097
+ description: OK
8098
+ default:
8099
+ content:
8100
+ application/problem+json:
8101
+ schema:
8102
+ $ref: "#/components/schemas/Detail"
8103
+ description: Error
8104
+ security:
8105
+ - BearerAuth: []
8106
+ summary: Suspend a workspace (backoffice)
8107
+ tags:
8108
+ - Onboarding
7939
8109
  /v1/contexts:
7940
8110
  get:
7941
8111
  description: Returns a cursor-paginated list of reconciliation contexts, optionally filtered by type and status.
@@ -15345,6 +15515,119 @@ paths:
15345
15515
  summary: Export variance report
15346
15516
  tags:
15347
15517
  - Reporting
15518
+ /v1/signup:
15519
+ post:
15520
+ description: "Starts self-service onboarding. This is a PUBLIC, anonymous, pre-tenant route: it carries no operator JWT and creates no account yet. It validates the payload (email, password policy, company name, and mandatory Terms of Service acceptance) and stores a pending record whose TTL is the whole expiry mechanism. A company name whose derived slug is reserved (e.g. admin, api, www) is rejected with a 400 application/problem+json error. To prevent account enumeration, an email that is already registered or pending returns the SAME 202 response as a new one; a repeat signup for a still-pending email re-sends the verification email, throttled per address. The route is rate-limited per client IP. All errors use the RFC 9457 application/problem+json contract."
15521
+ operationId: signup
15522
+ requestBody:
15523
+ content:
15524
+ application/json:
15525
+ schema:
15526
+ $ref: "#/components/schemas/SignupBody"
15527
+ required: true
15528
+ responses:
15529
+ "202":
15530
+ content:
15531
+ application/json:
15532
+ schema:
15533
+ $ref: "#/components/schemas/SignupResponse"
15534
+ description: Accepted
15535
+ default:
15536
+ content:
15537
+ application/problem+json:
15538
+ schema:
15539
+ $ref: "#/components/schemas/Detail"
15540
+ description: Error
15541
+ security: []
15542
+ summary: Create a self-service signup
15543
+ tags:
15544
+ - Onboarding
15545
+ /v1/signup/verify:
15546
+ post:
15547
+ description: "Completes self-service onboarding. This is a PUBLIC, anonymous, pre-tenant route: it exchanges the emailed verification token for a provisioned workspace. It is idempotent and re-entrant: a repeat call re-drives an incomplete provisioning to completion, and a token that no longer resolves (already used or expired) returns the same 200 response. The route is rate-limited per client IP."
15548
+ operationId: signup-verify
15549
+ requestBody:
15550
+ content:
15551
+ application/json:
15552
+ schema:
15553
+ $ref: "#/components/schemas/VerifyBody"
15554
+ required: true
15555
+ responses:
15556
+ "200":
15557
+ content:
15558
+ application/json:
15559
+ schema:
15560
+ $ref: "#/components/schemas/VerifyResponse"
15561
+ description: OK
15562
+ default:
15563
+ content:
15564
+ application/problem+json:
15565
+ schema:
15566
+ $ref: "#/components/schemas/Detail"
15567
+ description: Error
15568
+ security: []
15569
+ summary: Verify a self-service signup
15570
+ tags:
15571
+ - Onboarding
15572
+ /v1/workspace/billing:
15573
+ get:
15574
+ description: "Returns the authenticated tenant's own commercial state: its plan, billing status, trial deadline, and the whole days remaining in the trial (derived server-side). The tenant is resolved from the JWT tenant-slug claim — this endpoint never accepts a tenant identifier in the request and can only read the caller's own workspace. A tenant with no self-serve workspace record (the default/system tenant, or an unknown slug) returns 404. Errors use the RFC 9457 application/problem+json contract."
15575
+ operationId: workspace-billing
15576
+ responses:
15577
+ "200":
15578
+ content:
15579
+ application/json:
15580
+ schema:
15581
+ $ref: "#/components/schemas/WorkspaceBilling"
15582
+ description: OK
15583
+ default:
15584
+ content:
15585
+ application/problem+json:
15586
+ schema:
15587
+ $ref: "#/components/schemas/Detail"
15588
+ description: Error
15589
+ security:
15590
+ - BearerAuth: []
15591
+ summary: Read the current workspace's commercial state
15592
+ tags:
15593
+ - Onboarding
15594
+ /v1/workspaces/{slug}/auth-config:
15595
+ get:
15596
+ description: "Resolves the minimum a browser needs to start a PKCE login for a workspace: the console OAuth client id, the identity-provider organization, and the public issuer URL. This is a PUBLIC, anonymous, read-only, pre-tenant route: it carries no operator JWT and returns nothing about the account, its owner, or its lifecycle. It answers only for ACTIVE workspaces; a nonexistent, still-provisioning, or suspended workspace returns an IDENTICAL 404 (no enumeration of lifecycle state). The response is briefly cacheable and the route is rate-limited per client IP. Errors use the RFC 9457 application/problem+json contract."
15597
+ operationId: workspace-auth-config
15598
+ parameters:
15599
+ - description: Workspace slug as typed on the login screen.
15600
+ in: path
15601
+ name: slug
15602
+ required: true
15603
+ schema:
15604
+ description: Workspace slug as typed on the login screen.
15605
+ examples:
15606
+ - acme
15607
+ maxLength: 63
15608
+ type: string
15609
+ responses:
15610
+ "200":
15611
+ content:
15612
+ application/json:
15613
+ schema:
15614
+ $ref: "#/components/schemas/WorkspaceAuthConfig"
15615
+ description: OK
15616
+ headers:
15617
+ Cache-Control:
15618
+ schema:
15619
+ description: Short public cache lifetime for the login config.
15620
+ type: string
15621
+ default:
15622
+ content:
15623
+ application/problem+json:
15624
+ schema:
15625
+ $ref: "#/components/schemas/Detail"
15626
+ description: Error
15627
+ security: []
15628
+ summary: Resolve a workspace's public login configuration
15629
+ tags:
15630
+ - Onboarding
15348
15631
  /version:
15349
15632
  get:
15350
15633
  description: Returns the service build version (from the VERSION environment variable, default 0.0.0) and the server UTC timestamp.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lerianstudio/matcher-mcp",
3
- "version": "1.5.0-beta.2",
3
+ "version": "1.5.0-beta.4",
4
4
  "type": "module",
5
5
  "description": "Model Context Protocol server for the Matcher reconciliation engine",
6
6
  "license": "Apache-2.0",
@@ -48,11 +48,11 @@
48
48
  "@anthropic-ai/sdk": "^0.110.0",
49
49
  "@modelcontextprotocol/sdk": "^1.29.0",
50
50
  "@opentelemetry/api": "1.9.1",
51
- "@opentelemetry/exporter-metrics-otlp-http": "0.219.0",
52
- "@opentelemetry/exporter-trace-otlp-http": "0.219.0",
53
- "@opentelemetry/resources": "2.8.0",
54
- "@opentelemetry/sdk-metrics": "2.8.0",
55
- "@opentelemetry/sdk-node": "0.219.0",
51
+ "@opentelemetry/exporter-metrics-otlp-http": "0.220.0",
52
+ "@opentelemetry/exporter-trace-otlp-http": "0.220.0",
53
+ "@opentelemetry/resources": "2.9.0",
54
+ "@opentelemetry/sdk-metrics": "2.9.0",
55
+ "@opentelemetry/sdk-node": "0.220.0",
56
56
  "@opentelemetry/semantic-conventions": "1.41.1",
57
57
  "ajv": "^8.20.0",
58
58
  "openai": "^6.45.0",