Card snapshot
uptimeify.io
·
2026-09-04 20:49:46 UTC
·
a4c91cd526dafa5714aa8c2be52e20259c07b6a87bb293c0a864d3a5908a8301
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"name": "Uptimeify",
"description": "Uptimeify monitoring agent. Free anonymous website, DNS, TLS and email deliverability check tools, plus authenticated read-only access to your own Uptimeify monitors and incidents. Interact over the Model Context Protocol (MCP) at /mcp.",
"url": "https://uptimeify.io/mcp",
"provider": {
"organization": "Uptimeify",
"url": "https://uptimeify.io"
},
"version": "1.0.0",
"documentationUrl": "https://docs.uptimeify.io",
"iconUrl": "https://uptimeify.io/favicon.ico",
"supportedInterfaces": [
{
"url": "https://uptimeify.io/mcp",
"protocolBinding": "https://uptimeify.io/a2a/bindings/mcp/v1",
"protocolVersion": "1.0"
}
],
"capabilities": {
"streaming": true,
"pushNotifications": false,
"extendedAgentCard": false,
"extensions": [
{
"uri": "https://uptimeify.io/a2a/bindings/mcp/v1",
"description": "Uptimeify is reached over the Model Context Protocol (streamable HTTP) rather than an A2A protocol binding. Connect an MCP client to the interface URL; tools map to the skills below.",
"required": false,
"params": {
"mcpProtocolVersion": "2025-11-25",
"transport": "streamable-http",
"discovery": "https://uptimeify.io/.well-known/mcp.json"
}
}
]
},
"securitySchemes": {
"bearer": {
"httpAuthSecurityScheme": {
"scheme": "Bearer",
"description": "Uptimeify API token (starts with wsm_), created in the dashboard under API Tokens. OAuth 2.0 with PKCE is also supported; see /.well-known/oauth-authorization-server."
}
}
},
"defaultInputModes": [
"text/plain",
"application/json"
],
"defaultOutputModes": [
"text/plain",
"application/json"
],
"skills": [
{
"id": "check_ssl",
"name": "check_ssl",
"description": "Check a host's TLS/SSL certificate: issuer, validity dates, expiry, chain and trust verdict.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "check_dns",
"name": "check_dns",
"description": "Check a domain's DNS records (A/AAAA/CNAME/TXT/NS and more).",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "dns_propagation",
"name": "dns_propagation",
"description": "Check DNS propagation of a domain across multiple public resolvers.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "mx_lookup",
"name": "mx_lookup",
"description": "MX lookup for a domain: its mail exchanger records and their addresses.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "spf_check",
"name": "spf_check",
"description": "Check a domain's SPF record: fetch it and evaluate the policy.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "dkim_check",
"name": "dkim_check",
"description": "Check a domain's DKIM public key for a given selector: fetch it and validate it.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "dmarc_check",
"name": "dmarc_check",
"description": "Check a domain's DMARC policy record: fetch it and evaluate the policy.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "dnsbl_check",
"name": "dnsbl_check",
"description": "DNSBL check: whether a public IP address is listed on common DNS blacklists. Returns partial results if some blocklists are too slow to answer.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "whois",
"name": "whois",
"description": "Retrieve WHOIS registration data for a domain.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "domain_expiry",
"name": "domain_expiry",
"description": "Check a domain's registration expiry date and the days remaining.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "http_headers",
"name": "http_headers",
"description": "Fetch the HTTP response headers for a URL.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "hsts_check",
"name": "hsts_check",
"description": "HSTS check: a domain's HTTP Strict Transport Security configuration.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "redirect_check",
"name": "redirect_check",
"description": "Check the HTTP redirect chain for a URL, tracing it to the final destination.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "port_check",
"name": "port_check",
"description": "Check whether one or more TCP ports are open on a host. Pass a single port or a list, up to 10 per call.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "ping_test",
"name": "ping_test",
"description": "Ping test: measure TCP reachability and round-trip time to a host.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "website_status",
"name": "website_status",
"description": "Is a website up right now? Start here for any is-the-site-down question: up/down verdict, HTTP status, response time and redirect count in one call.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "response_time",
"name": "response_time",
"description": "Measure a website's response time (DNS, connect, TTFB, total).",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "ip_geolocation",
"name": "ip_geolocation",
"description": "IP geolocation for a public IP address or a domain (country, region, ASN, org).",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "asn_lookup",
"name": "asn_lookup",
"description": "ASN lookup for a public IP or domain: the autonomous system and its network owner.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "reverse_dns",
"name": "reverse_dns",
"description": "Reverse DNS: resolve a public IP address to its PTR hostname.",
"tags": [
"monitoring",
"anonymous"
]
},
{
"id": "list_monitors",
"name": "list_monitors",
"description": "List the monitors the caller can see, across all eight families (website, dns, icmp, tcp, ftp, smtp, ssh, imap_pop). Pass `kind` to limit to one family. Every item carries its `kind`, which monitor_status and check_history need. Each family returns at most one page (50 items); `total` is the real count across the queried families, not the number of items delivered -- if they differ, the list is truncated. Read-only.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:monitors:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "monitor_status",
"name": "monitor_status",
"description": "Get a single monitor by id, including its current up/down status and configuration. Pass the `kind` you got from list_monitors; without it, website is assumed.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:monitors:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "list_incidents",
"name": "list_incidents",
"description": "List recent incidents across all of the caller's monitors (most recent first).",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:incidents:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "check_history",
"name": "check_history",
"description": "Get the recent check history for a monitor. Pass the `kind` you got from list_monitors; without it, website is assumed. Optionally bound by an ISO date range.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:checks:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "uptime_summary",
"name": "uptime_summary",
"description": "Get uptime and average response-time summary (day / month / year) for a website monitor. Website monitors only; other families have no uptime endpoint.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:checks:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "list_alert_channels",
"name": "list_alert_channels",
"description": "List the notification channels that can raise an alert for the caller: name, type (email, sms, webhook, or one of the chat/on-call integrations), whether the channel is active, and its escalation priority and delay. Together with alert_history this answers \"why did nobody call me\". Read-only. A channel's own configuration is NOT returned -- no recipient addresses, phone numbers, webhook targets or credentials. Without `website_id` this lists the organization-level channels; pass `website_id` to see the channels that apply to one monitor, including its website-level overrides.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:alerts:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "alert_history",
"name": "alert_history",
"description": "Get the alert history for one monitor: which alerts went out, when, over which channel (name and type), and whether delivery succeeded or failed with which error. Answers \"why did nobody call me\". Pass the `kind` you got from list_monitors; without it, website is assumed. Paged, 25 entries per page by default, 100 at most. The channel's stored configuration is NOT returned -- no recipient addresses, phone numbers, webhook targets or credentials. `errorMessage` is different: it is free text from the delivery attempt itself and can quote what the receiving side said, so a failed send may name the SMTP host and port, a recipient address the mail server rejected, or the hostname of a webhook target.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:alerts:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "list_status_pages",
"name": "list_status_pages",
"description": "List the caller's status pages: name, slug, description, which customer each belongs to, whether it is published, its visibility (public, customer_members_only or password_protected) and whether a shared page password is set, the monitors it deliberately hides, and the custom domain it is served on. Read-only. Subscriber lists are NEVER returned -- this tool does not build a subscriber path, and the token guard denies that path outright. The page's visual design and the DNS verification token of the custom domain are removed from the answer as well.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:statuspages:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "list_maintenance_windows",
"name": "list_maintenance_windows",
"description": "List the caller's scheduled maintenance windows: name, start and end time, the IANA timezone the recurrence is interpreted in, whether it recurs and how, whether it is active, and which monitors it covers (`targets`, plus `targetKind`/`targetName` for a single-target window). During a window a monitor does not alert, which is the usual answer to \"why was there no incident\". Read-only. This endpoint has NO date-range filter: the result always covers every window the caller can see, past and future alike, so bound it by time yourself instead of assuming the list was filtered. The monitor rows behind a window are not returned -- `targets` names each covered monitor.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:statuspages:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "get_organization",
"name": "get_organization",
"description": "Get the caller's own organization: its numeric id, public id, name, account status (active or suspended) and, when a deactivated account is scheduled for deletion, the date that happens. Read-only, and deliberately narrow: these five fields are the entire answer. Billing address and cycle, payment method, discount codes, quota and price limits, the MFA policy and the organization's default notification settings are NOT returned, and this tool never reaches the SMTP, audit-log or data-export endpoints below /api/organization/.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:organization:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "list_users",
"name": "list_users",
"description": "List the members of the caller's organization that the caller is allowed to see: name, role (admin, editor or readonly), whether the member is still active, and when they joined, alongside `limits.currentSeats`, the number of members contained in this very answer. Answers \"who is responsible for this\". Read-only, and deliberately narrow: no e-mail addresses, no avatars, no customer assignments, and no member identifier at all -- a member can be named but not referenced, and two members sharing a name cannot be told apart. Note the scope of the list: it IS narrowed to the caller's customers, so a customer-scoped token sees only the members assigned to its own customer, plus itself -- for such a token neither the list nor `currentSeats` is the size of the organization.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:organization:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "list_customers",
"name": "list_customers",
"description": "List the customers of the caller's organization: numeric id, public id, name, account status and the date the customer was created, alongside how many monitors each one has (total, managed, self-service and DNSBL entries). A customer-bound token sees only its own customer. Read-only, and deliberately narrow: no contact or notification e-mail, no postal address, no VAT id, no phone number, no cancellation dates, no free-form custom fields and no tariff name -- the tariff is not part of this answer at all.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:organization:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
},
{
"id": "billing_summary",
"name": "billing_summary",
"description": "Get the SMS usage of the current month for the caller's organization: the organization-wide total and the per-customer breakdown. SMS usage is the only billing figure this tool reports -- it never returns a tariff or plan, an amount of money, a currency, an invoice or billing date, a billing address, a billing e-mail or a payment method. The breakdown names each customer only when the connection also carries the organization scope; with the billing scope alone every customer is identified by its public id and nothing else. A customer-bound token sees only its own customer. Read-only.",
"tags": [
"monitoring",
"authenticated"
],
"requiredScope": "mcp:billing:read",
"securityRequirements": [
{
"schemes": {
"bearer": {
"list": []
}
}
}
]
}
]
}