← The evidence ledger
Evidence row 300013
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 14fe11f8-298e-418f-81c2-3f4eba575f74
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 161c29e7f621094d71580f8ded6d8d562adf90c10280a4c7f9e2b9f1ba57c064
- Leaf
- 0xa78a332bc669662b7db532de67cc245142619cea348198ebee2d25fcc30821f3
What was observed
{
"count": 14,
"tools": [
{
"description": "WRITE: assign/attach a pricing product plan to a customer — this changes what the customer is billed. API: POST /payments/pricing/amberflo/customer-pricing.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"customer_id": {
"description": "The Amberflo customerId to assign the plan to.",
"type": "string"
},
"end_time_in_seconds": {
"description": "When the plan ends, unix epoch seconds.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"product_id": {
"description": "Product id the plan belongs to.",
"type": "string"
},
"product_plan_id": {
"description": "The productPlanId of the plan to assign.",
"type": "string"
},
"start_time_in_seconds": {
"description": "When the plan takes effect, unix epoch seconds.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"customer_id",
"product_plan_id"
],
"type": "object"
},
"name": "amberflo_assign_customer_plan"
},
{
"description": "WRITE: create/register a new customer in Amberflo (id + name required; optional email, enabled flag, and traits). Optionally auto-create the customer in Stripe. API: POST /customers/.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"create_in_stripe": {
"description": "When true, also auto-create this customer in Stripe (adds ?autoCreateCustomerInStripe=true).",
"type": "boolean"
},
"customer_email": {
"description": "Customer email address.",
"type": "string"
},
"customer_id": {
"description": "Unique customerId to assign (your identifier for the customer).",
"type": "string"
},
"customer_name": {
"description": "Human-readable customer name.",
"type": "string"
},
"enabled": {
"description": "Whether the customer is enabled.",
"type": "boolean"
},
"traits": {
"additionalProperties": {
"type": "string"
},
"description": "Arbitrary string traits (key/value metadata).",
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"required": [
"customer_id",
"customer_name"
],
"type": "object"
},
"name": "amberflo_create_customer"
},
{
"description": "Explain/drill into the raw meter events behind a meter's usage over a time range — useful to debug why a number looks off. API: POST /usage/explain.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"aggregation": {
"description": "Aggregation function: SUM | COUNT | MIN | MAX.",
"enum": [
"SUM",
"COUNT",
"MIN",
"MAX"
],
"type": "string"
},
"end_time_in_seconds": {
"description": "Range end, unix epoch seconds. Defaults to now if omitted.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"filter": {
"additionalProperties": {
"items": {
"type": "string"
},
"type": "array"
},
"description": "Dimension filter: map of dimension name -> allowed values.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"group_by": {
"description": "Dimension names to group by, e.g. [\"customerId\"].",
"items": {
"type": "string"
},
"type": "array"
},
"meter_api_name": {
"description": "The meterApiName to explain (from amberflo_list_meters).",
"type": "string"
},
"start_time_in_seconds": {
"description": "Range start, unix epoch seconds (inclusive).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"take_limit": {
"description": "Return only the top N records.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"meter_api_name",
"start_time_in_seconds"
],
"type": "object"
},
"name": "amberflo_explain_usage"
},
{
"description": "Get total usage across all meters over a time range, optionally grouped by customer or filtered to one customer. API: GET /usage/all.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"end_time_in_seconds": {
"description": "Range end, unix epoch seconds. Defaults to now if omitted.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"filter_by_customer_id": {
"description": "Restrict results to a single customerId.",
"type": "string"
},
"group_by_customer_id": {
"description": "When true, group results by customer (sends groupBy=customerId).",
"type": "boolean"
},
"start_time_in_seconds": {
"description": "Range start, unix epoch seconds (inclusive).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"time_grouping_interval": {
"description": "Bucket size: HOUR | DAY | WEEK | MONTH.",
"enum": [
"HOUR",
"DAY",
"WEEK",
"MONTH"
],
"type": "string"
}
},
"required": [
"start_time_in_seconds",
"time_grouping_interval"
],
"type": "object"
},
"name": "amberflo_get_all_usage"
},
{
"description": "Fetch a single customer by its Amberflo customerId. API: GET /customers/?customerId=<id>.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"customer_id": {
"description": "The Amberflo customerId to fetch.",
"type": "string"
}
},
"required": [
"customer_id"
],
"type": "object"
},
"name": "amberflo_get_customer"
},
{
"description": "Get a single customer invoice: the CURRENT open invoice (latest=true, default) or a SPECIFIC past invoice by product_plan_id + year + month + day. API: GET /payments/billing/customer-product-invoice.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"customer_id": {
"description": "The Amberflo customerId.",
"type": "string"
},
"day": {
"description": "Day of month of a specific past invoice.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"from_cache": {
"description": "Use cached invoice (faster). Default true.",
"type": "boolean"
},
"latest": {
"description": "Fetch the current open invoice. Default true. Ignored when a specific invoice is addressed.",
"type": "boolean"
},
"month": {
"description": "Month (1-12) of a specific past invoice.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"product_id": {
"description": "Product id. Default \"1\".",
"type": "string"
},
"product_plan_id": {
"description": "Product plan id of a specific past invoice (with year/month/day).",
"type": "string"
},
"with_payment_status": {
"description": "Include payment status. Default true.",
"type": "boolean"
},
"year": {
"description": "Year of a specific past invoice.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"customer_id"
],
"type": "object"
},
"name": "amberflo_get_customer_invoice"
},
{
"description": "Get a customer's LATEST assigned product plan (pricing). API: GET /payments/pricing/amberflo/customer-pricing?CustomerId=<id>.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"customer_id": {
"description": "The Amberflo customerId.",
"type": "string"
}
},
"required": [
"customer_id"
],
"type": "object"
},
"name": "amberflo_get_customer_plan"
},
{
"description": "Query aggregated usage for a single meter over a time range, optionally grouped/filtered. API: POST /usage/.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"aggregation": {
"description": "Aggregation function: SUM | COUNT | MIN | MAX.",
"enum": [
"SUM",
"COUNT",
"MIN",
"MAX"
],
"type": "string"
},
"end_time_in_seconds": {
"description": "Range end, unix epoch seconds. Defaults to now if omitted.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"filter": {
"additionalProperties": {
"items": {
"type": "string"
},
"type": "array"
},
"description": "Dimension filter: map of dimension name -> allowed values.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"group_by": {
"description": "Dimension names to group results by, e.g. [\"customerId\"].",
"items": {
"type": "string"
},
"type": "array"
},
"meter_api_name": {
"description": "The meterApiName to query (from amberflo_list_meters).",
"type": "string"
},
"start_time_in_seconds": {
"description": "Range start, unix epoch seconds (inclusive).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"take_is_ascending": {
"description": "Sort order for `take` (default false = descending).",
"type": "boolean"
},
"take_limit": {
"description": "Return only the top N groups.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"time_grouping_interval": {
"description": "Bucket size: HOUR | DAY | WEEK | MONTH.",
"enum": [
"HOUR",
"DAY",
"WEEK",
"MONTH"
],
"type": "string"
}
},
"required": [
"meter_api_name",
"aggregation",
"time_grouping_interval",
"start_time_in_seconds"
],
"type": "object"
},
"name": "amberflo_get_usage"
},
{
"description": "WRITE: record/ingest a single usage meter event (writes billable usage data) to the Amberflo ingestion host. API: POST /ingest/ on the ingest base URL.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"customer_id": {
"description": "The customerId this usage belongs to.",
"type": "string"
},
"dimensions": {
"additionalProperties": {
"type": "string"
},
"description": "Optional dimensions (key/value string metadata) for the event.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"meter_api_name": {
"description": "The meterApiName this event is for.",
"type": "string"
},
"meter_time_in_millis": {
"description": "Event timestamp, unix epoch milliseconds.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"meter_value": {
"description": "The numeric value of the usage event.",
"type": "number"
},
"unique_id": {
"description": "Optional idempotency/unique id for the event.",
"type": "string"
}
},
"required": [
"meter_api_name",
"meter_value",
"meter_time_in_millis",
"customer_id"
],
"type": "object"
},
"name": "amberflo_ingest_usage"
},
{
"description": "List all invoices for a customer (optionally for a specific product), with payment status. API: GET /payments/billing/customer-product-invoice/all.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"customer_id": {
"description": "The Amberflo customerId.",
"type": "string"
},
"from_cache": {
"description": "Use cached invoices (faster). Default true.",
"type": "boolean"
},
"product_id": {
"description": "Product id. Default \"1\".",
"type": "string"
},
"with_payment_status": {
"description": "Include payment status. Default true.",
"type": "boolean"
}
},
"required": [
"customer_id"
],
"type": "object"
},
"name": "amberflo_list_customer_invoices"
},
{
"description": "List the full history of product plans assigned to a customer over time. API: GET /payments/pricing/amberflo/customer-pricing/list?CustomerId=<id>.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"customer_id": {
"description": "The Amberflo customerId.",
"type": "string"
}
},
"required": [
"customer_id"
],
"type": "object"
},
"name": "amberflo_list_customer_plan_history"
},
{
"description": "List all customers registered in your Amberflo account (id, name, email, traits, enabled). Good first call to discover customer ids. API: GET /customers/.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "amberflo_list_customers"
},
{
"description": "List all meter definitions in your account (id, meterApiName, label, meterType, aggregation, etc.). Use meterApiName values here as inputs to usage tools. API: GET /meters.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "amberflo_list_meters"
},
{
"description": "List a customer's active prepaid credit orders for a product. API: GET /payments/pricing/amberflo/customer-prepaid/list?CustomerId=<id>&ProductId=<pid>.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"customer_id": {
"description": "The Amberflo customerId.",
"type": "string"
},
"product_id": {
"description": "Product id. Default \"1\".",
"type": "string"
}
},
"required": [
"customer_id"
],
"type": "object"
},
"name": "amberflo_list_prepaid_orders"
}
]
}What the leaf hashes
{"body":"161c29e7f621094d71580f8ded6d8d562adf90c10280a4c7f9e2b9f1ba57c064","id":300013,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793053222889175,"prev":null,"subject":"14fe11f8-298e-418f-81c2-3f4eba575f74","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).
- 0xa78a71c32d7010ef43326640b8dbd4d1b0e0ff21c1999cfefd1dc8b6137567e0
- 0x7a808a1f612de12c2637710d5fda4e57ea91a732a1cc9c7810c9fdaae9e06100
- 0x31581cfb8df064e8ec0d19a37b0e26e49a5650d1b7d609deee19bdf12871aec9
- 0xd08ba8c95bf959d6a4f774ac2ad8a5ba212beead02a84bb87bcc44bf208f6d8f
- 0x138e13c10d351cdbddb3893ab076c10c1a950ac57bf9b365b2d8b1b4760cc65e
- 0x3c27e63fa0e746e46122d162367083506fe36e2bc84e395dc31dfd2392900f68
- 0x230bcae3cb600ebc5a482ba6a9bd5bc7da9817d8d81f6df507bde74c47cca5f4
- 0xa6b96bbc1e45f1918b98580ae376f03cc11570456bdda7e116c9cbac543a22ea
- 0xdea9600bee8435f84fe6baa7a2097a96003e9096c73edfd41525e72052fb0c18
- 0x96a6c36f66ccdce2fc9d08bc551d6e8a2e7e8f76cf469865819b5bc277877605
- 0xfd7db9a5ff472cfefafacbeb7f7f7dc6fc7e28e7e0d99e3b79d231f0d5f46aee
- 0x1e464fcb484a1e782f9fe44be5118a9de934eb533c96ba10fc7d20e3a3e4711c
- 0x292ebdce6b8d3d7ef08ad646a0fd97dee9313ab55c1a350807d9f3013794c37a
- 0x428106f4ae4ec142f17aebf6fa50935242f8d3f1c211cf95d6351d03d11da2b7
- 0x62a900133713919f4eed33d8336876b7a6d538233b8a4f3ed03b29aa44f5bad0
- 0x1ac20d30773e1f4f2f811540e9a99b5cca9177c9e2e029acc0d80cf3f1d11f0f
- 0xd21942ae3214eff88e08ab04884fd4b11958b51af9a0741b7668e2d07a2c56c9
- 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
- 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
- Day root
- 0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
- Chained
- 0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
- Published
- On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae