@lerianstudio/matcher-mcp 4.5.0-beta.13 → 4.5.0-beta.14

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.
@@ -1347,6 +1347,12 @@ components:
1347
1347
  ConnectionResponse:
1348
1348
  additionalProperties: false
1349
1349
  properties:
1350
+ baseURL:
1351
+ description: Per-connection API base URL of a REST connector connection; absent when the deployment default applies and for database connectors
1352
+ examples:
1353
+ - https://sandbox.provider.example
1354
+ format: uri
1355
+ type: string
1350
1356
  configName:
1351
1357
  description: Connection configuration name
1352
1358
  examples:
@@ -1363,7 +1369,7 @@ components:
1363
1369
  - POSTGRESQL
1364
1370
  type: string
1365
1371
  host:
1366
- description: Database host
1372
+ description: Database host; empty for REST connector connections, whose service address is reported as baseURL
1367
1373
  examples:
1368
1374
  - db.internal.example.com
1369
1375
  type: string
@@ -1414,6 +1420,25 @@ components:
1414
1420
  - schemaDiscovered
1415
1421
  - lastSeenAt
1416
1422
  type: object
1423
+ ConnectionSchemaHistoryResponse:
1424
+ additionalProperties: false
1425
+ properties:
1426
+ connectionId:
1427
+ description: Internal Matcher connection identifier the history belongs to
1428
+ examples:
1429
+ - 3fa85f64-5717-4562-b3fc-2c963f66afa6
1430
+ type: string
1431
+ generations:
1432
+ description: Prior generations of the schema map, oldest first; empty when the map has never changed
1433
+ items:
1434
+ $ref: "#/components/schemas/SchemaGenerationResponse"
1435
+ type:
1436
+ - array
1437
+ - "null"
1438
+ required:
1439
+ - connectionId
1440
+ - generations
1441
+ type: object
1417
1442
  ConnectionSchemaResponse:
1418
1443
  additionalProperties: false
1419
1444
  properties:
@@ -1422,13 +1447,40 @@ components:
1422
1447
  examples:
1423
1448
  - 3fa85f64-5717-4562-b3fc-2c963f66afa6
1424
1449
  type: string
1450
+ fieldReport:
1451
+ description: "How the field lists in this map were obtained, recorded per row by the report that produced it and folded to one answer for the map: ENUMERATED means they come from the source's own catalog and are exhaustive for the credential that read it, so fewer fields than before is a real change in what the source reports; SAMPLED means they are inferred from a sample of the source's data (MongoDB reads the union of top-level keys over $sample-d documents), so they vary between reads with nothing changed at the source and no reduction is ever asserted from them — how the persisted field lists then build up, and what ends that, is stated in full in this operation's description. It is NEVER derived from this connection's current databaseType, which an operator can edit: a retype must not re-attribute field sets a different connector produced. Present only when every row of the map records the same kind: absent when the rows disagree, when any of them predates the recording of this fact, and when the probe that installed them could not show which connector produced its snapshot — in each case nothing is asserted about how the fields were obtained. It is the fact that separates routes (1) and (5) of notYetExtractableReason, whose remedies contradict each other"
1452
+ enum:
1453
+ - ENUMERATED
1454
+ - SAMPLED
1455
+ examples:
1456
+ - SAMPLED
1457
+ type: string
1458
+ lastKnownMap:
1459
+ description: "The tables are a retired generation, not the connection's live map: the source has not re-asserted them since they were archived. Absent when the rows served are live"
1460
+ type: boolean
1461
+ lastReadAt:
1462
+ description: When the map was last successfully read from the source; absent when no map has ever been read
1463
+ examples:
1464
+ - "2026-07-26T14:03:00Z"
1465
+ format: date-time
1466
+ type: string
1467
+ notYetExtractableReason:
1468
+ description: "Why nothing in this map can be extracted from yet; absent when at least one table can. COLUMNS_NOT_ENUMERATED means Matcher holds no confirmed column observation for this connection that it could project into an extraction, and it arrives by five routes worth distinguishing, each named here so a client can tie an operator-facing sentence to one: (1) TABLES_WITHOUT_COLUMNS — every persisted table carries no column, the only route visible in the tables below; (2) COLUMNS_NEVER_CONFIRMED — no probe of this connection ever recorded a confirmed-columns observation, in which case the tables below may still show columns; (3) COLUMN_VISIBILITY_LOST — an established connection whose source enumerates its columns from a catalog returned columns for no table it still names, so that snapshot was refused and the tables below show their last confirmed columns; (4) NO_TABLES_NAMED — the source named no table at all; (5) SAMPLED_REPORT_NO_FIELDS — the source's field list is sampled from its data rather than enumerated from a catalog and the draw returned no field, so nothing was refused: the tables installed, no column was confirmed, and extraction reopens as soon as a draw returns fields. Routes 3, 4 and 5 arrive as the same response and a client states them as readings rather than picking one. Routes 1 and 5 also arrive as the same response — a map in which every table carries no column — and their remedies contradict each other, so fieldReport above says which of the two applies: SAMPLED is route 5 and no grant is involved, ENUMERATED is route 1 and the credential's column grants are the thing to check. Both must be stated when fieldReport is absent, which happens when the rows of this map disagree about how their field lists were obtained, when any of them predates the recording of that fact, or when the probe that installed them could not show which connector produced its snapshot — the connector registry is not consulted on this path at all, so a registered connector is neither what makes the kind present nor what its absence says anything about. No route distinguishes a source with no columns to give from columns this connection's credential can no longer read"
1469
+ enum:
1470
+ - COLUMNS_NOT_ENUMERATED
1471
+ examples:
1472
+ - COLUMNS_NOT_ENUMERATED
1473
+ type: string
1425
1474
  tables:
1426
- description: All discovered table schemas for the connection
1475
+ description: All discovered table schemas for the connection; the last known map even when the connection is unreachable
1427
1476
  items:
1428
1477
  $ref: "#/components/schemas/SchemaTableResponse"
1429
1478
  type:
1430
1479
  - array
1431
1480
  - "null"
1481
+ unreachable:
1482
+ description: "The connection could not be reached when this map was served: the tables are the last known map and may no longer match the source"
1483
+ type: boolean
1432
1484
  required:
1433
1485
  - connectionId
1434
1486
  - tables
@@ -1506,6 +1558,13 @@ components:
1506
1558
  examples:
1507
1559
  - database
1508
1560
  type: string
1561
+ requiredFields:
1562
+ description: Credential field names a REST-category connector requires at provisioning time, in render order; absent for database connectors
1563
+ items:
1564
+ type: string
1565
+ type:
1566
+ - array
1567
+ - "null"
1509
1568
  type:
1510
1569
  description: Canonical engine datasource-type token
1511
1570
  examples:
@@ -2282,6 +2341,9 @@ components:
2282
2341
  - https://example.com/errors/example
2283
2342
  format: uri
2284
2343
  type: string
2344
+ upstream:
2345
+ $ref: "#/components/schemas/Upstream"
2346
+ description: "RFC 9457 extension member: the error a proxied third-party provider reported. Absent unless the emitting service explicitly surfaced one."
2285
2347
  type: object
2286
2348
  DialectResponse:
2287
2349
  additionalProperties: false
@@ -5585,6 +5647,65 @@ components:
5585
5647
  required:
5586
5648
  - sample
5587
5649
  type: object
5650
+ RESTConnectionRequest:
5651
+ additionalProperties: false
5652
+ properties:
5653
+ apiKey:
5654
+ description: Stripe restricted API key (sealed; never emitted)
5655
+ maxLength: 512
5656
+ type: string
5657
+ baseURL:
5658
+ description: Optional per-connection API base URL (http/https); when omitted the deployment default for the connector type is used
5659
+ examples:
5660
+ - https://sandbox.provider.example
5661
+ format: uri
5662
+ maxLength: 2048
5663
+ type: string
5664
+ clientCert:
5665
+ description: PEM-encoded Pix mTLS client certificate (sealed; never emitted)
5666
+ maxLength: 8192
5667
+ type: string
5668
+ clientID:
5669
+ description: Pix OAuth2 client id (sealed; never emitted)
5670
+ maxLength: 512
5671
+ type: string
5672
+ clientKey:
5673
+ description: PEM-encoded Pix mTLS client private key (sealed; never emitted)
5674
+ maxLength: 8192
5675
+ type: string
5676
+ clientSecret:
5677
+ description: Pix OAuth2 client secret (sealed; never emitted)
5678
+ maxLength: 512
5679
+ type: string
5680
+ configName:
5681
+ description: Unique connection config name (tenant-scoped)
5682
+ examples:
5683
+ - pagbank-prod
5684
+ maxLength: 255
5685
+ minLength: 1
5686
+ type: string
5687
+ connectorType:
5688
+ description: REST connector type this connection serves
5689
+ enum:
5690
+ - PAGBANK
5691
+ - STRIPE
5692
+ - PIX_BCB
5693
+ examples:
5694
+ - PAGBANK
5695
+ minLength: 1
5696
+ type: string
5697
+ ediToken:
5698
+ description: PagBank EDI token (sealed; never emitted)
5699
+ maxLength: 512
5700
+ type: string
5701
+ establishmentID:
5702
+ description: PagBank establishment id (sealed; never emitted)
5703
+ maxLength: 512
5704
+ type: string
5705
+ required:
5706
+ - configName
5707
+ - connectorType
5708
+ type: object
5588
5709
  ReadinessResponse:
5589
5710
  additionalProperties: false
5590
5711
  properties:
@@ -6162,16 +6283,77 @@ components:
6162
6283
  required:
6163
6284
  - name
6164
6285
  type: object
6286
+ SchemaGenerationResponse:
6287
+ additionalProperties: false
6288
+ properties:
6289
+ archivedAt:
6290
+ description: When this generation stopped being the live schema map
6291
+ examples:
6292
+ - "2026-07-15T12:30:00Z"
6293
+ format: date-time
6294
+ type: string
6295
+ fieldReport:
6296
+ description: "How this retired generation's field lists were obtained, read off its own rows: ENUMERATED from the source's own catalog, exhaustively for the credential that read it, so this generation's column sets are a statement about the source; SAMPLED from a sample of the source's data (MongoDB reads the union of top-level keys over $sample-d documents), so it may name a field the source no longer held, because nothing observed a removal — how such a field list built up while this generation was live, and what closed the generation, is stated in full in this operation's description. Present only when every table of this generation records the same kind: absent when they disagree, for every generation retired before the fact was recorded per row, and when the probe that installed a table of it could not show which connector produced its snapshot. It is never derived from the connection's current databaseType: that field is editable and a generation's provenance is not"
6297
+ enum:
6298
+ - ENUMERATED
6299
+ - SAMPLED
6300
+ examples:
6301
+ - SAMPLED
6302
+ type: string
6303
+ retirementCause:
6304
+ description: What was observed of this whole generation when it was retired, when every table in it agrees; absent when one install retired different tables for different observed reasons, in which case each table carries its own. Values carry the same meanings as on a table, and none of them asserts that the source removed anything
6305
+ enum:
6306
+ - ABSENT_FROM_CATALOG
6307
+ - COLUMN_SET_SUPERSEDED
6308
+ - CONNECTION_RETIRED
6309
+ - UNKNOWN_LEGACY
6310
+ examples:
6311
+ - ABSENT_FROM_CATALOG
6312
+ type: string
6313
+ tables:
6314
+ description: The tables and columns this generation of the map asserted
6315
+ items:
6316
+ $ref: "#/components/schemas/SchemaTableResponse"
6317
+ type:
6318
+ - array
6319
+ - "null"
6320
+ required:
6321
+ - archivedAt
6322
+ - tables
6323
+ type: object
6165
6324
  SchemaTableResponse:
6166
6325
  additionalProperties: false
6167
6326
  properties:
6168
6327
  columns:
6169
- description: Columns discovered for the table
6328
+ description: "Columns discovered for the table. WHAT THIS LIST IS A STATEMENT ABOUT DEPENDS ON HOW THE CONNECTOR OBTAINED IT — see fieldReport on the map, or on the generation, that carries this table. WHERE THE FIELD LISTS ARE ENUMERATED from the source's own catalog, these are the columns the latest probe asserted for the credential that read it. WHERE THEY ARE SAMPLED from the source's data instead, a field listed here may appear in no document the source currently holds: it carries no marker saying so and stays extractable, deliberately, because nothing observed its removal. How a sampled connector's field lists build up, and what ends that, is stated in full in this operation's description — read it before authoring a field map against these columns"
6170
6329
  items:
6171
6330
  $ref: "#/components/schemas/SchemaColumnResponse"
6172
6331
  type:
6173
6332
  - array
6174
6333
  - "null"
6334
+ columnsNarrowed:
6335
+ description: "The source now reports FEWER columns for this table than the read before did: the columns shown were confirmed by the latest probe, and at least one column it used to report is no longer among them. The table stays extractable from the narrower set; a field map projecting a column that stopped being reported will fail at extraction. It says nothing about WHY the set narrowed — a narrowed grant and a dropped column are the same answer from a catalog"
6336
+ type: boolean
6337
+ columnsStale:
6338
+ description: "The last probe named this table without confirming its columns, so the column list is the last CONFIRMED one and may no longer match the source. The table is still extractable from it; a field map authored against it may silently stop matching. ABSENT DOES NOT MEAN THE WHOLE LIST WAS CONFIRMED BY THE LATEST PROBE: it means that probe reported columns for this table, which confirms the list only where the field lists are ENUMERATED from a catalog. Where they are SAMPLED from the source's data a draw confirms only the fields it showed, and the rest of the list may include fields the latest draw did not show — see columns, and this operation's description, which states in full how such a list builds up and what ends it"
6339
+ type: boolean
6340
+ notYetExtractableReason:
6341
+ description: Why this table cannot be extracted from yet; absent when it can. COLUMNS_NOT_ENUMERATED means the source named the table but no columns for it, which is indistinguishable between a source with no columns to give and columns the connection's credential cannot read
6342
+ enum:
6343
+ - COLUMNS_NOT_ENUMERATED
6344
+ examples:
6345
+ - COLUMNS_NOT_ENUMERATED
6346
+ type: string
6347
+ retirementCause:
6348
+ description: What was observed when this table's row stopped being the live truth; absent on a live row. ABSENT_FROM_CATALOG means the source's catalog no longer listed the table, which does NOT distinguish a dropped table from one this connection's credential can no longer see. COLUMN_SET_SUPERSEDED means the catalog still listed it with a different non-empty column set, the same ambiguity one level down; it is recorded only for a report that ENUMERATED the source's catalog, because a report whose field list was sampled from the source's data retires no column set when a draw differs — so a sampled table reaches this cause when its connection is retyped to a connector that enumerates and the catalog list supersedes the accumulated union. CONNECTION_RETIRED means an operator retired the connection, the one cause that is genuinely known. UNKNOWN_LEGACY means the row was archived by an earlier release that recorded no cause
6349
+ enum:
6350
+ - ABSENT_FROM_CATALOG
6351
+ - COLUMN_SET_SUPERSEDED
6352
+ - CONNECTION_RETIRED
6353
+ - UNKNOWN_LEGACY
6354
+ examples:
6355
+ - ABSENT_FROM_CATALOG
6356
+ type: string
6175
6357
  tableName:
6176
6358
  description: Name of the discovered table
6177
6359
  examples:
@@ -7780,6 +7962,20 @@ components:
7780
7962
  - string
7781
7963
  - "null"
7782
7964
  type: object
7965
+ Upstream:
7966
+ additionalProperties: false
7967
+ properties:
7968
+ code:
7969
+ description: The upstream provider's own error code, verbatim.
7970
+ examples:
7971
+ - E4001
7972
+ type: string
7973
+ message:
7974
+ description: The upstream provider's own error message, verbatim (bounded, never its raw response body).
7975
+ examples:
7976
+ - account not found at provider
7977
+ type: string
7978
+ type: object
7783
7979
  VarianceReportRowResponse:
7784
7980
  additionalProperties: false
7785
7981
  properties:
@@ -10004,7 +10200,7 @@ paths:
10004
10200
  - Discovery
10005
10201
  /v1/discovery/connections/{connectionId}/schema:
10006
10202
  get:
10007
- description: Returns all discovered table schemas for a connection.
10203
+ description: "Returns all discovered table schemas for a connection — the map a field map is authored against. WHERE THIS CONNECTION'S CONNECTOR SAMPLES ITS FIELD LISTS rather than enumerating them from a catalog (the connection's fieldReport is SAMPLED on the live schema map; MongoDB reads the union of top-level keys over $sample-d documents), a table's persisted field set is CUMULATIVE WITHIN ITS CURRENT GENERATION: it holds every field any draw has shown since that generation began, and no draw takes a field out of it, because a draw that missed a field is a fact about this service's own sample and never about the source. So a field the map lists may appear in no document the source currently holds; it carries no marker saying so and stays extractable, deliberately, because nothing observed its removal. CUMULATIVE WITHIN A GENERATION IS NOT CUMULATIVE FOREVER: a generation ENDS at any retirement that records why — ABSENT_FROM_CATALOG, COLUMN_SET_SUPERSEDED or CONNECTION_RETIRED, whose meanings the retirementCause property carries — and the next report opens a new generation holding its own fields alone, so a served field set CAN come back narrower across that boundary, with the wider generation dated, caused and still readable on the schema-history surface. WHERE THE FIELD LISTS ARE ENUMERATED from the source's own catalog none of this applies: a table's columns are what the latest probe asserted for the credential that read it, and a catalog list is authoritative over a sampled union — which is what COLUMN_SET_SUPERSEDED records when a connection's connector starts enumerating."
10008
10204
  operationId: getDiscoveryConnectionSchema
10009
10205
  parameters:
10010
10206
  - description: Connection ID (UUID)
@@ -10035,6 +10231,39 @@ paths:
10035
10231
  summary: Get connection schema
10036
10232
  tags:
10037
10233
  - Discovery
10234
+ /v1/discovery/connections/{connectionId}/schema/history:
10235
+ get:
10236
+ description: "Returns the prior generations of a connection's schema map, oldest first, so this is every schema fact the connection ever persisted that stopped being live, dated with the instant it stopped. Producing one destroys nothing: a generation is RETIRED, and each one reports what was OBSERVED when it was retired, never that the source removed anything — a catalog cannot distinguish a dropped table from one this connection's credential can no longer see. WHERE THIS CONNECTION'S CONNECTOR SAMPLES ITS FIELD LISTS rather than enumerating them from a catalog (the connection's fieldReport is SAMPLED on the live schema map; MongoDB reads the union of top-level keys over $sample-d documents), a table's persisted field set is CUMULATIVE WITHIN ITS CURRENT GENERATION: it holds every field any draw has shown since that generation began, and no draw takes a field out of it, because a draw that missed a field is a fact about this service's own sample and never about the source. So a field the map lists may appear in no document the source currently holds; it carries no marker saying so and stays extractable, deliberately, because nothing observed its removal. CUMULATIVE WITHIN A GENERATION IS NOT CUMULATIVE FOREVER: a generation ENDS at any retirement that records why — ABSENT_FROM_CATALOG, COLUMN_SET_SUPERSEDED or CONNECTION_RETIRED, whose meanings the retirementCause property carries — and the next report opens a new generation holding its own fields alone, so a served field set CAN come back narrower across that boundary, with the wider generation dated, caused and still readable on the schema-history surface. WHERE THE FIELD LISTS ARE ENUMERATED from the source's own catalog none of this applies: a table's columns are what the latest probe asserted for the credential that read it, and a catalog list is authoritative over a sampled union — which is what COLUMN_SET_SUPERSEDED records when a connection's connector starts enumerating. The recorded causes are ABSENT_FROM_CATALOG (the source's catalog stopped listing the table), COLUMN_SET_SUPERSEDED (the catalog listed it again with a different non-empty column set; recorded only for a report that ENUMERATED the source's catalog, since a report whose field list was sampled from the source's data retires no column set when a draw differs — that difference is this service's own sample varying and asserts nothing about the source), CONNECTION_RETIRED (an operator retired the connection, the one cause that is genuinely known) and UNKNOWN_LEGACY (archived by an earlier release that recorded no cause)."
10237
+ operationId: getDiscoveryConnectionSchemaHistory
10238
+ parameters:
10239
+ - description: Connection ID (UUID)
10240
+ in: path
10241
+ name: connectionId
10242
+ required: true
10243
+ schema:
10244
+ description: Connection ID (UUID)
10245
+ examples:
10246
+ - 3fa85f64-5717-4562-b3fc-2c963f66afa6
10247
+ format: uuid
10248
+ type: string
10249
+ responses:
10250
+ "200":
10251
+ content:
10252
+ application/json:
10253
+ schema:
10254
+ $ref: "#/components/schemas/ConnectionSchemaHistoryResponse"
10255
+ description: OK
10256
+ default:
10257
+ content:
10258
+ application/problem+json:
10259
+ schema:
10260
+ $ref: "#/components/schemas/Detail"
10261
+ description: Error
10262
+ security:
10263
+ - BearerAuth: []
10264
+ summary: Get connection schema history
10265
+ tags:
10266
+ - Discovery
10038
10267
  /v1/discovery/connections/{connectionId}/test:
10039
10268
  post:
10040
10269
  description: Tests connectivity for a specific discovered connection owned by the current tenant.
@@ -10209,6 +10438,34 @@ paths:
10209
10438
  summary: Refresh discovery
10210
10439
  tags:
10211
10440
  - Discovery
10441
+ /v1/discovery/rest-connections:
10442
+ post:
10443
+ description: "Provisions a REST acquirer connection (PagBank, Stripe, Pix BCB) and seals its multi-field credential. Which credential fields a connector type requires is published as `requiredFields` on GET /v1/discovery/connector-types — the SAME table this endpoint enforces, so advertisement and enforcement cannot diverge. An optional per-connection `baseURL` overrides the deployment-configured endpoint for that connector type, so one deployment can hold a provider's sandbox and production connections side by side. Database addressing is absent by design: no REST connector uses it. The supplied credential is sealed before persistence and is never returned. The created connection appears in GET /v1/discovery/connections like any other."
10444
+ operationId: createRESTDiscoveryConnection
10445
+ requestBody:
10446
+ content:
10447
+ application/json:
10448
+ schema:
10449
+ $ref: "#/components/schemas/RESTConnectionRequest"
10450
+ required: true
10451
+ responses:
10452
+ "201":
10453
+ content:
10454
+ application/json:
10455
+ schema:
10456
+ $ref: "#/components/schemas/ConnectionResponse"
10457
+ description: Created
10458
+ default:
10459
+ content:
10460
+ application/problem+json:
10461
+ schema:
10462
+ $ref: "#/components/schemas/Detail"
10463
+ description: Error
10464
+ security:
10465
+ - BearerAuth: []
10466
+ summary: Create REST discovery connection
10467
+ tags:
10468
+ - Discovery
10212
10469
  /v1/discovery/status:
10213
10470
  get:
10214
10471
  description: Returns the current Fetcher integration status including health and connection count.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lerianstudio/matcher-mcp",
3
- "version": "4.5.0-beta.13",
3
+ "version": "4.5.0-beta.14",
4
4
  "type": "module",
5
5
  "description": "Model Context Protocol server for the Matcher reconciliation engine",
6
6
  "license": "Apache-2.0",