Manage the AI agents your company employs: workforce review, contracts, bill checks. 41 MCP tools.
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.
Reconcile an AI vendor's per-resolution bill against your own records: which billed units your ledger shows as resolved, rejected, reopened, outside coverage, or unknown, and the disputed amount. A pure function over the lines you pass: reads nothing, stores nothing, needs no key. Paste the bill lines and your ledger events.
The vendor's bill lines for the period.
The billing period (from < to).
Every ledger event you hold for the vendor (reopens after the period still dispute).
External ids your records show as rejected (a person overturned it).
External ids your records show as resolved by the agent.
The spans your records cover; omitted = nothing is covered.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mcp-server https://metrxbot.com/api/mcp/connect
Reconcile an AI vendor's per-resolution bill against your own records: which billed units your ledger shows as resolved, rejected, reopened, outside coverage, or unknown, and the disputed amount. A pure function over the lines you pass: reads nothing, stores nothing, needs no key. Paste the bill lines and your ledger events.
| Argument | Type | Description |
|---|---|---|
| billed* | array | The vendor's bill lines for the period. |
| ledger | array | Every ledger event you hold for the vendor (reopens after the period still dispute). |
| period* | object | The billing period (from < to). |
| rejected_ids | array | External ids your records show as rejected (a person overturned it). |
| resolved_ids | array | External ids your records show as resolved by the agent. |
| covered_spans | array | The spans your records cover; omitted = nothing is covered. |
| import_rejected_count | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"period",
"billed"
],
"properties": {
"billed": {
"type": "array",
"items": {
"type": "object",
"required": [
"external_id",
"billed_at",
"cost_usd"
],
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"cost_usd": {
"type": "number",
"maximum": 1000000,
"minimum": -1000000
},
"billed_at": {
"$ref": "#/properties/period/properties/from"
},
"tier_name": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
]
},
"external_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The vendor's id for the unit (ticket id)."
},
"adjustment_of": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 500,
"description": "The vendor's bill lines for the period."
},
"ledger": {
"type": "array",
"items": {
"type": "object",
"required": [
"external_id",
"event_type",
"occurred_at"
],
"properties": {
"event_type": {
"enum": [
"solved",
"closed",
"reopened",
"public_comment"
],
"type": "string"
},
"external_id": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"occurred_at": {
"$ref": "#/properties/period/properties/from"
}
},
"additionalProperties": false
},
"maxItems": 2000,
"description": "Every ledger event you hold for the vendor (reopens after the period still dispute)."
},
"period": {
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"$ref": "#/properties/period/properties/from"
},
"from": {
"type": "string",
"format": "date-time"
}
},
"description": "The billing period (from < to).",
"additionalProperties": false
},
"rejected_ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 2000,
"description": "External ids your records show as rejected (a person overturned it)."
},
"resolved_ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 2000,
"description": "External ids your records show as resolved by the agent."
},
"covered_spans": {
"type": "array",
"items": {
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"anyOf": [
{
"$ref": "#/properties/period/properties/from"
},
{
"type": "null"
}
]
},
"from": {
"$ref": "#/properties/period/properties/from"
}
},
"additionalProperties": false
},
"maxItems": 100,
"description": "The spans your records cover; omitted = nothing is covered."
},
"import_rejected_count": {
"type": "integer",
"maximum": 1000000,
"minimum": 0
}
},
"additionalProperties": false
}Draft a job contract for an AI agent from a template (support_triage, sdr_qualification, internal_assistant, coding_patch): objective, unit of work, acceptance criteria, budget, and the human baseline for ROI. Returns the draft to publish plus validation errors and warnings. A pure function over your input: reads nothing, stores nothing, needs no key. Publishing the draft is a separate step (set_job_contract, 'admin' scope).
| Argument | Type | Description |
|---|---|---|
| notes | string | |
| owner* | string | The person accountable for this agent (name or email). |
| template* | string | Which job template to start from. |
| workload | string | Defaults to agent_key, else the template key. |
| agent_key | string | The agent the contract will be published for (informational in the draft). |
| objective | string | |
| budget_usd | number | |
| unit_of_work | string | What one unit is, e.g. 'resolved ticket'. |
The weekly workforce review: every AI agent in the org as a line manager would read it (job, cost this window, outcomes, scorecard state, the candidate decision and why). org=demo reads the public Northwind sample and needs no key; org=me reads your own org and needs an API key with the 'read' scope. Paged by cursor. Numbers are the same the review page shows.
| Argument | Type | Description |
|---|---|---|
| org | string | 'demo' (default) reads the public Northwind sample review and needs no key; 'me' reviews your own org and needs an API key with the 'read' scope. |
| limit | integer | Agents per page (default 25, max 100). |
| cursor | string | Next page: the cursor the previous page returned. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"org": {
"enum": [
"demo",
"me"
],
"type": "string",
"default": "demo",
"description": "'demo' (default) reads the public Northwind sample review and needs no key; 'me' reviews your own org and needs an API key with the 'read' scope."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Agents per page (default 25, max 100)."
},
"cursor": {
"type": "string",
"maxLength": 256,
"description": "Next page: the cursor the previous page returned."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 13, 2026.
| budget_period | string |
| human_baseline | object | What the same unit costs when a person does it; the ROI comparison needs it. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"template",
"owner"
],
"properties": {
"notes": {
"type": "string",
"maxLength": 2000
},
"owner": {
"type": "string",
"maxLength": 320,
"minLength": 1,
"description": "The person accountable for this agent (name or email)."
},
"template": {
"enum": [
"support_triage",
"sdr_qualification",
"internal_assistant",
"coding_patch"
],
"type": "string",
"description": "Which job template to start from."
},
"workload": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Defaults to agent_key, else the template key."
},
"agent_key": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The agent the contract will be published for (informational in the draft)."
},
"objective": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"budget_usd": {
"type": "number",
"maximum": 10000000,
"exclusiveMinimum": 0
},
"unit_of_work": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "What one unit is, e.g. 'resolved ticket'."
},
"budget_period": {
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string"
},
"human_baseline": {
"type": "object",
"required": [
"cost_per_unit_usd",
"basis"
],
"properties": {
"basis": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Where the baseline number comes from."
},
"minutes_per_unit": {
"anyOf": [
{
"type": "number",
"maximum": 100000,
"minimum": 0
},
{
"type": "null"
}
]
},
"cost_per_unit_usd": {
"type": "number",
"maximum": 1000000,
"minimum": 0
}
},
"description": "What the same unit costs when a person does it; the ROI comparison needs it.",
"additionalProperties": false
}
},
"additionalProperties": false
}