Usage metering + SLA accounting for agent services (the meter behind x402 micropayments).
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Freeze all open events into an immutable invoice (exactly-once). The invoice amount is what agent-escrow-agent should settle.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Freeze all open events into an immutable invoice (exactly-once). The invoice amount is what agent-escrow-agent should settle.
| Argument | Type | Description |
|---|---|---|
| meter_id* | string |
{
"type": "object",
"title": "close_periodArguments",
"required": [
"meter_id"
],
"properties": {
"meter_id": {
"type": "string",
"title": "Meter Id"
}
}
}Create a usage meter between a provider and a consumer agent. unit: what is being counted (call, token, kwh, ...). Price is in minor currency units (cents) per unit. Returns the meter_id.
| Argument | Type | Description |
|---|---|---|
| unit* | string | |
| consumer* | string | |
| currency | string | |
| provider* | string | |
| sla_target | number | |
| price_minor_per_unit* | number |
{
"type": "object",
"title": "create_meterArguments",
"required": [
"provider",
"consumer",
"unit",
"price_minor_per_unit"
],
"properties": {
"unit": {
"type": "string",
"title": "Unit"
},
"consumer": {
"type": "string",
"title": "Consumer"
},
"currency": {
"type": "string",
"title": "Currency",
"default": "USD"
},
"provider": {
"type": "string",
"title": "Provider"
},
"sla_target": {
"type": "number",
"title": "Sla Target",
"default": 0.99
},
"price_minor_per_unit": {
"type": "number",
"title": "Price Minor Per Unit"
}
}
}Fleet-standard self-description.
No arguments.
{
"type": "object",
"title": "describe_agentArguments",
"properties": {}
}Admin: flag/unflag a meter as test/synthetic so its events are excluded from usage statistics by default. Touches meter metadata only — never events, never the hash chain, never billing accruals. Requires the server's VIRIDIS_ADMIN_TOKEN.
| Argument | Type | Description |
|---|---|---|
| note | string | |
| is_test* | boolean | |
| meter_id* | string | |
| admin_token* | string |
{
"type": "object",
"title": "flag_meterArguments",
"required": [
"meter_id",
"is_test",
"admin_token"
],
"properties": {
"note": {
"type": "string",
"title": "Note",
"default": ""
},
"is_test": {
"type": "boolean",
"title": "Is Test"
},
"meter_id": {
"type": "string",
"title": "Meter Id"
},
"admin_token": {
"type": "string",
"title": "Admin Token"
}
}
}Read usage events (paginated, read-only). Filter by meter, provider, consumer_class (internal|external|unknown), channel, outcome (ok|error), and ISO date range [since, until). Test-flagged events are excluded unless include_test=true. Returns events + next_cursor.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| since | any | |
| until | any | |
| cursor | any | |
| channel | any | |
| outcome | any | |
| meter_id | any | |
| provider | any | |
| include_test | boolean | |
| consumer_class | any |
{
"type": "object",
"title": "list_eventsArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 100
},
"since": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Since",
"default": null
},
"until": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Until",
"default": null
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cursor",
"default": null
},
"channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Channel",
"default": null
},
"outcome": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Outcome",
"default": null
},
"meter_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Meter Id",
"default": null
},
"provider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Provider",
"default": null
},
"include_test": {
"type": "boolean",
"title": "Include Test",
"default": false
},
"consumer_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Consumer Class",
"default": null
}
}
}List all meters with event/invoice counts.
No arguments.
{
"type": "object",
"title": "list_metersArguments",
"properties": {}
}Record a usage event. Idempotent on event_id (safe to retry — never double-billed). outcome is 'ok' or 'error' and feeds the SLA report.
| Argument | Type | Description |
|---|---|---|
| outcome | string | |
| event_id* | string | |
| metadata | any | |
| meter_id* | string | |
| quantity* | number |
{
"type": "object",
"title": "record_usageArguments",
"required": [
"meter_id",
"event_id",
"quantity"
],
"properties": {
"outcome": {
"type": "string",
"title": "Outcome",
"default": "ok"
},
"event_id": {
"type": "string",
"title": "Event Id"
},
"metadata": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Metadata",
"default": null
},
"meter_id": {
"type": "string",
"title": "Meter Id"
},
"quantity": {
"type": "number",
"title": "Quantity"
}
}
}Pure SLA report: success_rate vs sla_target, breach flag. No mutation.
| Argument | Type | Description |
|---|---|---|
| meter_id* | string |
{
"type": "object",
"title": "sla_reportArguments",
"required": [
"meter_id"
],
"properties": {
"meter_id": {
"type": "string",
"title": "Meter Id"
}
}
}Totals for a meter: event count, total quantity, accrued minor units.
| Argument | Type | Description |
|---|---|---|
| meter_id* | string |
{
"type": "object",
"title": "usage_summaryArguments",
"required": [
"meter_id"
],
"properties": {
"meter_id": {
"type": "string",
"title": "Meter Id"
}
}
}Usage time series bucketed on each event's recorded_at (UTC; bucket=day|hour), grouped across meters by provider — a real time-series primitive, independent of meter creation times. Includes per-bucket breakdowns by consumer_class / channel / provider. est_accrued_minor is an estimate; authoritative billing stays with usage_summary.
| Argument | Type | Description |
|---|---|---|
| since | any | |
| until | any | |
| bucket | string | |
| channel | any | |
| meter_id | any | |
| provider | any | |
| include_test | boolean | |
| consumer_class | any |
{
"type": "object",
"title": "usage_timeseriesArguments",
"properties": {
"since": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Since",
"default": null
},
"until": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Until",
"default": null
},
"bucket": {
"type": "string",
"title": "Bucket",
"default": "day"
},
"channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Channel",
"default": null
},
"meter_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Meter Id",
"default": null
},
"provider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Provider",
"default": null
},
"include_test": {
"type": "boolean",
"title": "Include Test",
"default": false
},
"consumer_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Consumer Class",
"default": null
}
}
}Verify the tamper-evident event hash chain for a meter.
| Argument | Type | Description |
|---|---|---|
| meter_id* | string |
{
"type": "object",
"title": "verify_chainArguments",
"required": [
"meter_id"
],
"properties": {
"meter_id": {
"type": "string",
"title": "Meter Id"
}
}
}