{"openapi":"3.1.0","info":{"title":"Mackerel (BYOK) API","version":"0.1.0","description":"Mackerel (BYOK) lets an AI assistant read your own Mackerel data through the Mackerel API with a key you supply (Mackerel API key (read permission is enough)). Read-only: 12 tools (get_organization, list_services, list_roles, list_hosts, get_host, list_host_metric_names, get_host_metrics, get_latest_metric, list_alerts, get_alert, list_monitors, list_dashboards). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-mackerel.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-mackerel/docs"},"termsOfService":"https://connectorbay.com/byok-mackerel/terms"},"servers":[{"url":"https://byok-mackerel.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-mackerel/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_organization":{"post":{"operationId":"get_organization","summary":"Show the Mackerel organization the key belongs to: its name and display name. Use for \"Which Mackerel organization is my","description":"Show the Mackerel organization the key belongs to: its name and display name. Use for \"Which Mackerel organization is my API key for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_organizationArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_services":{"post":{"operationId":"list_services","summary":"List the monitored services of the organization with their notes and role names. Use for \"What services do I monitor in ","description":"List the monitored services of the organization with their notes and role names. Use for \"What services do I monitor in Mackerel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_servicesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_roles":{"post":{"operationId":"list_roles","summary":"List the roles (server groups) of one service with their notes. Use for \"Which roles does the Mackerel service Hatena-Bl","description":"List the roles (server groups) of one service with their notes. Use for \"Which roles does the Mackerel service Hatena-Blog have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_name":{"description":"Name of the service, as shown by list_services.","maxLength":63,"title":"Service Name","type":"string"}},"required":["service_name"],"title":"list_rolesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_hosts":{"post":{"operationId":"list_hosts","summary":"List registered hosts (default: working and standby ones) with status, roles, size and registration time; filter by serv","description":"List registered hosts (default: working and standby ones) with status, roles, size and registration time; filter by service, role, name, status or custom identifier. Use for \"Which hosts are in the web role of the Mackerel service Hatena-Blog\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only hosts in this service name.","title":"Service"},"role":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only hosts in this role (used together with service).","title":"Role"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only hosts with this exact host name.","title":"Name"},"status":{"anyOf":[{"maxLength":32,"type":"string"},{"type":"null"}],"default":null,"description":"Host status to include, for example working, standby, maintenance or poweroff (default: working and standby).","title":"Status"},"custom_identifier":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the host with this custom identifier.","title":"Custom Identifier"}},"title":"list_hostsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_host":{"post":{"operationId":"get_host","summary":"Get one host by id: name, status, roles per service, size, notes, registration and retirement information. Use for \"Show","description":"Get one host by id: name, status, roles per service, size, notes, registration and retirement information. Use for \"Show details of Mackerel host 3vZHfLBsmHJ\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"description":"Mackerel host id (a short string such as '3vZHfLBsmHJ'), taken from list_hosts.","maxLength":40,"title":"Host Id","type":"string"}},"required":["host_id"],"title":"get_hostArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_host_metric_names":{"post":{"operationId":"list_host_metric_names","summary":"List the metric names an agent has posted for one host, such as loadavg5 or memory.used. Use for \"Which metrics does Mac","description":"List the metric names an agent has posted for one host, such as loadavg5 or memory.used. Use for \"Which metrics does Mackerel host 3vZHfLBsmHJ report\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"description":"Mackerel host id (a short string such as '3vZHfLBsmHJ'), taken from list_hosts.","maxLength":40,"title":"Host Id","type":"string"}},"required":["host_id"],"title":"list_host_metric_namesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_host_metrics":{"post":{"operationId":"get_host_metrics","summary":"Get the values of one metric of one host between two Unix times, in time order. Pick a name from list_host_metric_names.","description":"Get the values of one metric of one host between two Unix times, in time order. Pick a name from list_host_metric_names. Use for \"What was the 5-minute load average of Mackerel host 3vZHfLBsmHJ in the last hour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"description":"Mackerel host id (a short string such as '3vZHfLBsmHJ'), taken from list_hosts.","maxLength":40,"title":"Host Id","type":"string"},"name":{"description":"Metric name, for example loadavg5.","maxLength":200,"title":"Name","type":"string"},"from_time":{"description":"Start of the period as Unix time in seconds.","minimum":0,"title":"From Time","type":"integer"},"to_time":{"description":"End of the period as Unix time in seconds.","minimum":0,"title":"To Time","type":"integer"}},"required":["host_id","name","from_time","to_time"],"title":"get_host_metricsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_latest_metric":{"post":{"operationId":"get_latest_metric","summary":"Get the newest value of one metric for one host (one call per host and metric name). Use for \"What is the current loadav","description":"Get the newest value of one metric for one host (one call per host and metric name). Use for \"What is the current loadavg5 of Mackerel host 3vZHfLBsmHJ\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"description":"Host id to read.","maxLength":40,"title":"Host Id","type":"string"},"name":{"description":"Metric name, for example loadavg5.","maxLength":200,"title":"Name","type":"string"}},"required":["host_id","name"],"title":"get_latest_metricArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_alerts":{"post":{"operationId":"list_alerts","summary":"List alerts newest first (open ones by default) with status, monitor id, host id, value or message and open and close ti","description":"List alerts newest first (open ones by default) with status, monitor id, host id, value or message and open and close times (Unix seconds); page with next_id. Use for \"Which Mackerel alerts are open right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"with_closed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include resolved alerts as well as open ones.","title":"With Closed"},"next_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Alert id from the previous answer's nextId to fetch older alerts.","title":"Next Id"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many alerts to return (1 to 100, default 100).","title":"Limit"}},"title":"list_alertsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_alert":{"post":{"operationId":"get_alert","summary":"Get one alert by id with status, type, monitor id, host id, measured value or message and times. Use for \"Show Mackerel ","description":"Get one alert by id with status, type, monitor id, host id, measured value or message and times. Use for \"Show Mackerel alert 2cSZzK3XfmB\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"alert_id":{"description":"Id of the alert, taken from list_alerts.","maxLength":40,"title":"Alert Id","type":"string"}},"required":["alert_id"],"title":"get_alertArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_monitors":{"post":{"operationId":"list_monitors","summary":"List the monitor rules (host metric, service metric, connectivity, external, expression and check monitors) with their n","description":"List the monitor rules (host metric, service metric, connectivity, external, expression and check monitors) with their names, thresholds and scopes. Use for \"Which monitors are configured in Mackerel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_monitorsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_dashboards":{"post":{"operationId":"list_dashboards","summary":"List the custom dashboards with title, URL path, notes and creation and update times (Unix seconds). Use for \"What dashb","description":"List the custom dashboards with title, URL path, notes and creation and update times (Unix seconds). Use for \"What dashboards exist in my Mackerel organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_dashboardsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}