{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_qnn8at73btfh","handle":"zerm","url":"https://wellknown.network/agents/zerm","links":{"self":"https://wellknown.network/agents/zerm/record.json","html":"https://wellknown.network/agents/zerm","markdown":"https://wellknown.network/agents/zerm/record.md","api":"https://wellknown.network/api/v1/agents/zerm","status":"https://wellknown.network/api/v1/agents/zerm/status","claim":"https://wellknown.network/agents/zerm/claim","claimApi":"https://wellknown.network/api/v1/claims","badge":"https://wellknown.network/agents/zerm/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air:zerm.dev:server:zerm","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"zerm","summary":"Agent utility belt: memory, locks, webhook inboxes, timers, DNS, email, URL, timezone, cron","description":"Agent utility belt: memory, locks, webhook inboxes, timers, DNS, email, URL, timezone, cron","publisher":{"name":"dev.zerm","url":null},"homepage":"https://zerm.dev","repository":null,"version":"0.3.2","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://zerm.dev/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-08-11T01:39:30.51281Z","publishedAt":"2026-08-11T01:39:30.51281Z","registryName":"dev.zerm/zerm"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"documents.conversion","name":"Document Conversion","confidence":1,"provenance":"derived"},{"slug":"productivity.email","name":"Email","confidence":1,"provenance":"derived"},{"slug":"automation.scheduling","name":"Scheduling & Cron","confidence":1,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.977,"provenance":"derived"},{"slug":"dev.package-management","name":"Packages & Dependencies","confidence":0.919,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":0.911,"provenance":"derived"},{"slug":"knowledge.memory","name":"Agent Memory","confidence":0.885,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":0.583,"provenance":"derived"}],"categories":["automation","commerce","communication","dev","documents","knowledge","productivity","security"]},"observed":{"status":"live","statusReason":"Responded 2h ago.","lastOkAt":"2026-09-06T01:23:48.051Z","lastProbedAt":"2026-09-06T01:23:48.051Z","statusComputedAt":"2026-09-06T01:24:40.593Z","reliability30d":{"probes":1,"successRate":1,"p50Ms":101},"latestObservations":[{"at":"2026-09-06T01:23:48.051Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":101,"error":null,"detail":{"tools":[{"name":"kv_set","description":"Store a value durably under (namespace, key) with a TTL. Survives across your sessions - use it as memory between stateless runs. Value must be a string (JSON-e"},{"name":"kv_get","description":"Retrieve a value previously stored with kv_set. Call this at the start of a run to restore state, preferences, or progress saved by earlier runs. Returns found="},{"name":"kv_delete","description":"Permanently remove one key from your namespace, freeing a slot against the 1000-key limit. Use it when a stored value is wrong or unwanted before its TTL runs o"},{"name":"kv_list","description":"List the keys held in your namespace, optionally narrowed to those starting with a prefix. Use it to discover what earlier runs saved before deciding what to fe"},{"name":"timer_verify_origin","description":"One-time consent handshake before timers can deliver to an origin. Prerequisite: an HTTPS endpoint you control that can read a request body and echo part of it "},{"name":"timer_schedule","description":"Schedule a durable callback: at fire time this service POSTs your JSON payload to your URL. Use it to wake up future runs of yourself or your orchestrator - age"},{"name":"timer_cancel","description":"Cancel a pending timer using the id returned by timer_schedule. The id is the authorization: holding it is what proves you scheduled the timer, so keep it secre"},{"name":"timer_status","description":"Check a timer by the id returned by timer_schedule: status (pending|delivering|delivered|failed|cancelled), attempts, last error. Returns found=false for an unk"},{"name":"name_check","description":"Live availability check for a name across domain TLDs (registry RDAP), npm, PyPI, and GitHub usernames. Real registry lookups at call time - not guesses. Each r"},{"name":"email_check","description":"Deliverability probe for an email address without sending anything: syntax validation, live MX lookup (with A/AAAA fallback per RFC 5321), disposable-domain det"},{"name":"url_check","description":"Live URL health check: follows the full redirect chain (each hop reported), returns final status, content type, response time, TLS certificate expiry and trust,"},{"name":"cron_next","description":"Deterministic cron expression validator and scheduler: parses a cron expression (5 or 6 field, seconds optional) and computes the next N actual fire times, time"},{"name":"regex_test","description":"Execute a regex against test strings and return the ACTUAL matches: match text, indices, capture groups, named groups, and optional replacement output. Determin"},{"name":"fixture_rows","description":"Bulk realistic test data: generate up to 10000 rows from a field schema in one call - orders of magnitude cheaper than generating rows with tokens. Deterministi"},{"name":"tz_convert","description":"Deterministic timezone conversion: convert a timestamp between IANA timezones with full DST awareness. Models routinely miscalculate DST transitions - this give"},{"name":"tz_info","description":"Timezone intelligence: for a given IANA timezone and date, returns the UTC offset, whether DST is active, the exact UTC instant of each DST transition in that y"},{"name":"dns_query","description":"Full DNS record lookup for a domain: returns A, AAAA, MX, NS, TXT, CNAME, SOA, and CAA records in one call. Automatically parses SPF and DMARC policies from TXT"},{"name":"request_tool","description":"Hit a capability wall? Describe a tool you wish this server had and the task you were trying to accomplish. The operator reviews every submission; the most-requ"},{"name":"lock_acquire","description":"Acquire a mutual-exclusion lock so concurrent agent runs do not double-process the same work. If two runs race, exactly one gets acquired=true plus a release to"},{"name":"lock_release","description":"Release a lock early using the token returned by lock_acquire. Only the token holder can release; without the token the lock simply expires on its own. Returns "},{"name":"counter_next","description":"Atomically increment a named counter and return the new value. Guaranteed unique, monotonically increasing integers across concurrent stateless runs - use it fo"},{"name":"inbox_create","description":"Create a URL that receives HTTP requests for you. Point any webhook (GitHub, Stripe, CI, a form) at it and read what arrives with inbox_poll - no server, no sig"},{"name":"inbox_poll","description":"Read requests delivered to an inbox since you last looked. Pass after=<the next_after from your previous poll> to get only new ones; omit it to start from the b"},{"name":"inbox_delete","description":"Delete an inbox and everything delivered to it. The URL stops accepting requests immediately. Inboxes also delete themselves once unpolled past their expiry, so"}],"toolCount":24,"serverName":"zerm","capabilities":["tools"],"serverVersion":"0.3.2","protocolVersion":"2025-06-18"}}],"tools":[{"name":"kv_set","description":"Store a value durably under (namespace, key) with a TTL. Survives across your sessions - use it as memory between stateless runs. Value must be a string (JSON-e"},{"name":"kv_get","description":"Retrieve a value previously stored with kv_set. Call this at the start of a run to restore state, preferences, or progress saved by earlier runs. Returns found="},{"name":"kv_delete","description":"Permanently remove one key from your namespace, freeing a slot against the 1000-key limit. Use it when a stored value is wrong or unwanted before its TTL runs o"},{"name":"kv_list","description":"List the keys held in your namespace, optionally narrowed to those starting with a prefix. Use it to discover what earlier runs saved before deciding what to fe"},{"name":"timer_verify_origin","description":"One-time consent handshake before timers can deliver to an origin. Prerequisite: an HTTPS endpoint you control that can read a request body and echo part of it "},{"name":"timer_schedule","description":"Schedule a durable callback: at fire time this service POSTs your JSON payload to your URL. Use it to wake up future runs of yourself or your orchestrator - age"},{"name":"timer_cancel","description":"Cancel a pending timer using the id returned by timer_schedule. The id is the authorization: holding it is what proves you scheduled the timer, so keep it secre"},{"name":"timer_status","description":"Check a timer by the id returned by timer_schedule: status (pending|delivering|delivered|failed|cancelled), attempts, last error. Returns found=false for an unk"},{"name":"name_check","description":"Live availability check for a name across domain TLDs (registry RDAP), npm, PyPI, and GitHub usernames. Real registry lookups at call time - not guesses. Each r"},{"name":"email_check","description":"Deliverability probe for an email address without sending anything: syntax validation, live MX lookup (with A/AAAA fallback per RFC 5321), disposable-domain det"},{"name":"url_check","description":"Live URL health check: follows the full redirect chain (each hop reported), returns final status, content type, response time, TLS certificate expiry and trust,"},{"name":"cron_next","description":"Deterministic cron expression validator and scheduler: parses a cron expression (5 or 6 field, seconds optional) and computes the next N actual fire times, time"},{"name":"regex_test","description":"Execute a regex against test strings and return the ACTUAL matches: match text, indices, capture groups, named groups, and optional replacement output. Determin"},{"name":"fixture_rows","description":"Bulk realistic test data: generate up to 10000 rows from a field schema in one call - orders of magnitude cheaper than generating rows with tokens. Deterministi"},{"name":"tz_convert","description":"Deterministic timezone conversion: convert a timestamp between IANA timezones with full DST awareness. Models routinely miscalculate DST transitions - this give"},{"name":"tz_info","description":"Timezone intelligence: for a given IANA timezone and date, returns the UTC offset, whether DST is active, the exact UTC instant of each DST transition in that y"},{"name":"dns_query","description":"Full DNS record lookup for a domain: returns A, AAAA, MX, NS, TXT, CNAME, SOA, and CAA records in one call. Automatically parses SPF and DMARC policies from TXT"},{"name":"request_tool","description":"Hit a capability wall? Describe a tool you wish this server had and the task you were trying to accomplish. The operator reviews every submission; the most-requ"},{"name":"lock_acquire","description":"Acquire a mutual-exclusion lock so concurrent agent runs do not double-process the same work. If two runs race, exactly one gets acquired=true plus a release to"},{"name":"lock_release","description":"Release a lock early using the token returned by lock_acquire. Only the token holder can release; without the token the lock simply expires on its own. Returns "},{"name":"counter_next","description":"Atomically increment a named counter and return the new value. Guaranteed unique, monotonically increasing integers across concurrent stateless runs - use it fo"},{"name":"inbox_create","description":"Create a URL that receives HTTP requests for you. Point any webhook (GitHub, Stripe, CI, a form) at it and read what arrives with inbox_poll - no server, no sig"},{"name":"inbox_poll","description":"Read requests delivered to an inbox since you last looked. Pass after=<the next_after from your previous poll> to get only new ones; omit it to start from the b"},{"name":"inbox_delete","description":"Delete an inbox and everything delivered to it. The URL stops accepting requests immediately. Inboxes also delete themselves once unpolled past their expiry, so"}],"package":null},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"dev.zerm/zerm","url":"https://registry.modelcontextprotocol.io/v0/servers/dev.zerm%2Fzerm","firstSeenAt":"2026-09-05T23:20:59.369Z","fetchedAt":"2026-09-05T23:20:59.369Z","normalizedAt":"2026-09-05T23:20:59.369Z"}]},"firstSeenAt":"2026-09-05T23:20:59.369Z","updatedAt":"2026-09-06T01:24:49.213Z"}