MCP 서버

agent-metering

io.github.jdhart81/agent-metering

이 MCP로 할 수 있는 일

Creates usage meters, records tamper-evident service events, calculates billing and SLA metrics, produces reports, and closes billing periods for agent services.

close_period
Freeze all open events into an immutable invoice (exactly-once). The invoice amount is what agent-escrow-agent should settle.
입력 스키마
{'type': 'object', 'title': 'close_periodArguments', 'required': ['meter_id'], 'properties': {'meter_id': {'type': 'string', 'title': 'Meter Id'}}}
출력 스키마
{'type': 'object', 'title': 'close_periodOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
create_meter
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.
입력 스키마
{'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'}}}
출력 스키마
{'type': 'object', 'title': 'create_meterOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
describe_agent
Fleet-standard self-description.
입력 스키마
{'type': 'object', 'title': 'describe_agentArguments', 'properties': {}}
출력 스키마
{'type': 'object', 'title': 'describe_agentOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
flag_meter
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.
입력 스키마
{'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'}}}
출력 스키마
{'type': 'object', 'title': 'flag_meterOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
list_events
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.
입력 스키마
{'type': 'object', 'title': 'list_eventsArguments', 'properties': {'limit': {'type': 'integer', 'title': 'Limit', 'default': 100}, 'since': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Since', 'default': None}, 'until': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Until', 'default': None}, 'cursor': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Cursor', 'default': None}, 'channel': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Channel', 'default': None}, 'outcome': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Outcome', 'default': None}, 'meter_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Meter Id', 'default': None}, 'provider': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Provider', 'default': None}, 'include_test': {'type': 'boolean', 'title': 'Include Test', 'default': False}, 'consumer_class': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Consumer Class', 'default': None}}}
출력 스키마
{'type': 'object', 'title': 'list_eventsOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
list_meters
List all meters with event/invoice counts.
입력 스키마
{'type': 'object', 'title': 'list_metersArguments', 'properties': {}}
출력 스키마
{'type': 'object', 'title': 'list_metersOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
record_usage
Record a usage event. Idempotent on event_id (safe to retry — never double-billed). outcome is 'ok' or 'error' and feeds the SLA report.
입력 스키마
{'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': None}, 'meter_id': {'type': 'string', 'title': 'Meter Id'}, 'quantity': {'type': 'number', 'title': 'Quantity'}}}
출력 스키마
{'type': 'object', 'title': 'record_usageOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
sla_report
Pure SLA report: success_rate vs sla_target, breach flag. No mutation.
입력 스키마
{'type': 'object', 'title': 'sla_reportArguments', 'required': ['meter_id'], 'properties': {'meter_id': {'type': 'string', 'title': 'Meter Id'}}}
출력 스키마
{'type': 'object', 'title': 'sla_reportOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
usage_summary
Totals for a meter: event count, total quantity, accrued minor units.
입력 스키마
{'type': 'object', 'title': 'usage_summaryArguments', 'required': ['meter_id'], 'properties': {'meter_id': {'type': 'string', 'title': 'Meter Id'}}}
출력 스키마
{'type': 'object', 'title': 'usage_summaryOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
usage_timeseries
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.
입력 스키마
{'type': 'object', 'title': 'usage_timeseriesArguments', 'properties': {'since': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Since', 'default': None}, 'until': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Until', 'default': None}, 'bucket': {'type': 'string', 'title': 'Bucket', 'default': 'day'}, 'channel': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Channel', 'default': None}, 'meter_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Meter Id', 'default': None}, 'provider': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Provider', 'default': None}, 'include_test': {'type': 'boolean', 'title': 'Include Test', 'default': False}, 'consumer_class': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Consumer Class', 'default': None}}}
출력 스키마
{'type': 'object', 'title': 'usage_timeseriesOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
verify_chain
Verify the tamper-evident event hash chain for a meter.
입력 스키마
{'type': 'object', 'title': 'verify_chainArguments', 'required': ['meter_id'], 'properties': {'meter_id': {'type': 'string', 'title': 'Meter Id'}}}
출력 스키마
{'type': 'object', 'title': 'verify_chainOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
추가됨
describe_agent
2026년 9월 17일 12:42 PM
추가됨
flag_meter
2026년 9월 17일 12:42 PM
추가됨
usage_timeseries
2026년 9월 17일 12:42 PM
추가됨
list_events
2026년 9월 17일 12:42 PM
추가됨
list_meters
2026년 9월 17일 12:42 PM
추가됨
verify_chain
2026년 9월 17일 12:42 PM
추가됨
close_period
2026년 9월 17일 12:42 PM
추가됨
sla_report
2026년 9월 17일 12:42 PM
추가됨
usage_summary
2026년 9월 17일 12:42 PM
추가됨
record_usage
2026년 9월 17일 12:42 PM
추가됨
create_meter
2026년 9월 17일 12:42 PM