{"server":{"name":"com.botrecipe/timer","title":"Sandbox Timer","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://timer.cloudforbots.com/mcp","type":"streamable-http"}],"version":"1.0.0","websiteUrl":"https://timer.cloudforbots.com","description":"Flags idle agent sandboxes (E2B, Vercel, Daytona, Modal), shows idle cost, returns kill calls."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-10-16T13:01:31.717311Z","publishedAt":"2026-10-16T13:01:31.717311Z","statusChangedAt":"2026-10-16T13:01:31.717311Z"},"dev.protogrid/connectability":{"class":"R0","autonomous":true,"human_steps":[],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://timer.cloudforbots.com/mcp","transport":"streamable-http","templated":false,"headers":[],"auth":{"type":"none","location":null,"secret_name":null,"oauth":null},"protocol":{"supported_versions":["2025-11-25"],"stateless":true},"health":{"reachable":true,"uptime_30d":1,"latency_ms_p50":260,"consecutive_failures":0,"last_probe_at":"2026-10-19T21:11:23.458Z","last_ok_at":"2026-10-19T21:11:23.458Z"}}],"packages":[]},"dev.protogrid/tools":[{"name":"idle_report","title":null,"description":"Which sandboxes were flagged idle and what idle time cost, per provider, from what track_sessions has seen. Without an API key pass fleet. With a key: every fleet on it. Free shows 7 days, Pro 30.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:11:23.458Z"},{"name":"set_idle_rules","title":null,"description":"Pro: save the rules track_sessions applies to a fleet: idle_minutes threshold, max_lifetime_minutes, default rates_per_hour by provider, and alert_webhook. Free returns a preview of the rules and saves nothing (pass the same values on each track_sessions call instead).","annotations":null,"source":"probe","observed_at":"2026-10-19T21:11:23.458Z"},{"name":"track_sessions","title":null,"description":"Send your agent's running sandbox sessions (up to 200; call it on a heartbeat, e.g. every 5 minutes) and get back which are idle past your threshold or over their max lifetime, the dollars idle time has cost at the hourly rates you pass, and what to do. Pro acts: returns a ready-to-run kill call per idle sandbox for its provider (E2B kill, Vercel Sandbox stop, Daytona stop, Modal terminate) and POSTs one alert per sandbox to your webhook. Free watch-only returns would_kill and sends nothing. We never hold provider keys and never kill anything ourselves: your agent runs the call with its own key.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:11:23.458Z"},{"name":"usage_and_upgrade","title":null,"description":"Show today's usage for your key or IP and the $9/month upgrade link. Free tier: 500 calls/day. Not metered.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:11:23.458Z"},{"name":"weekly_report","title":null,"description":"Plain-English summary of the last 7 days: sandboxes watched, how many sat idle, dollars idle time cost at your rates, kill calls returned (Pro) or that would have been (free). Read-only; sends nothing. Needs a free API key.","annotations":null,"source":"probe","observed_at":"2026-10-19T21:11:23.458Z"}],"dev.protogrid/trust":{"score":83,"components":{"hygiene":80,"liveness":100,"freshness":100,"provenance":55},"drivers":["+dns-namespace","+website","+reachable","+uptime-100%","+updated-4d-ago","-no-repository"],"flags":["no-repository"],"blocked":false,"computed_at":"2026-10-20T02:40:51.324Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":73,"label":"new","components":{"auth":null,"hygiene":71,"protocol":75,"stability":null,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28","status":"warn","category":"protocol"},{"id":"protocol.stateless","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"protocol.transport","detail":"streamable HTTP","status":"pass","category":"protocol"},{"id":"protocol.list_ttl","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"descriptions are concise","status":"pass","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones","status":"fail","category":"hygiene"},{"id":"tools.directory_hints","detail":"no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: track_sessions (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); idle_report (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); set_idle_rules (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …","status":"fail","category":"hygiene"},{"id":"tools.token_cost","detail":"about 1,034 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"tool history recorded for 3 of the 7 days needed","status":"na","category":"stability"},{"id":"stability.rug_pull","detail":"tool history recorded for 3 of the 7 days needed","status":"na","category":"stability"},{"id":"deps.known_vulns","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"no npm or PyPI package","status":"na","category":"dependencies"}],"drivers":["-tools.annotations","-tools.directory_hints","~protocol.modern"],"flags":[],"tool_count":5,"token_estimate":1034,"tools_hash":"547f8afc8bc49fd33ee2ff093cfcdc6e","tools_changed_at":null,"computed_at":"2026-10-20T03:05:22.594Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"com.botrecipe/timer","aliases":[],"alias_count":0,"repository_key":null,"owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/com.botrecipe%2Ftimer/tools","arguments":{"name":"com.botrecipe/timer"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/com.botrecipe%2Ftimer/connection?target=mcpServers","arguments":{"name":"com.botrecipe/timer","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}