get_tool_status
Check live operational status, uptime percentage, and response time for any AI tool by providing its slug. Data updates every 5 minutes from independent monitoring infrastructure.
Instructions
Get live operational status, uptime percentage, and response time for any AI tool. Checks every 5 minutes from independent infrastructure.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Tool slug — e.g. "chatgpt", "claude", "cursor", "github-copilot", "gemini" |
Implementation Reference
- src/index.ts:87-108 (handler)The async handler function that executes the get_tool_status tool logic: fetches tool status from the API, formats uptime, response time, last checked time, and active incident info into a text response.
async ({ slug }) => { const d = await fetchJSON<ToolStatus>(`/tools/${slug}/status`) const uptime = (label: string, pct: number | null) => pct !== null ? `${label} uptime: ${pct}%` : `${label} uptime: no data` const lines = [ `**${d.tool.name}** — ${d.status.toUpperCase()}`, d.response_ms !== null ? `Response time: ${d.response_ms}ms` : null, d.checked_at ? `Last checked: ${new Date(d.checked_at).toUTCString()}` : null, uptime('30-day', d.uptime_30d), uptime('90-day', d.uptime_90d), ].filter(Boolean) as string[] if (d.active_incident) { const i = d.active_incident lines.push('', `⚠️ ACTIVE INCIDENT: ${i.title}`, ` Severity: ${i.severity}`, ` Since: ${new Date(i.started_at).toUTCString()}`) } lines.push('', `Full status page: https://tickerr.ai/status/${slug}`) return { content: [{ type: 'text' as const, text: lines.join('\n') }] } } ) - src/index.ts:86-86 (schema)Input schema for get_tool_status: expects a single 'slug' string parameter describing which AI tool to check status for.
{ slug: z.string().describe('Tool slug — e.g. "chatgpt", "claude", "cursor", "github-copilot", "gemini"') }, - src/index.ts:83-108 (registration)Registration of the 'get_tool_status' tool on the MCP server with its description, input schema, and handler.
server.tool( 'get_tool_status', 'Get live operational status, uptime percentage, and response time for any AI tool. Checks every 5 minutes from independent infrastructure.', { slug: z.string().describe('Tool slug — e.g. "chatgpt", "claude", "cursor", "github-copilot", "gemini"') }, async ({ slug }) => { const d = await fetchJSON<ToolStatus>(`/tools/${slug}/status`) const uptime = (label: string, pct: number | null) => pct !== null ? `${label} uptime: ${pct}%` : `${label} uptime: no data` const lines = [ `**${d.tool.name}** — ${d.status.toUpperCase()}`, d.response_ms !== null ? `Response time: ${d.response_ms}ms` : null, d.checked_at ? `Last checked: ${new Date(d.checked_at).toUTCString()}` : null, uptime('30-day', d.uptime_30d), uptime('90-day', d.uptime_90d), ].filter(Boolean) as string[] if (d.active_incident) { const i = d.active_incident lines.push('', `⚠️ ACTIVE INCIDENT: ${i.title}`, ` Severity: ${i.severity}`, ` Since: ${new Date(i.started_at).toUTCString()}`) } lines.push('', `Full status page: https://tickerr.ai/status/${slug}`) return { content: [{ type: 'text' as const, text: lines.join('\n') }] } } ) - src/index.ts:9-16 (helper)Generic helper function fetchJSON used by the handler to call the tickerr API for tool status data.
async function fetchJSON<T>(path: string): Promise<T> { const res = await fetch(`${BASE_URL}${path}`, { headers: { 'User-Agent': UA } }) if (!res.ok) { const text = await res.text().catch(() => '') throw new Error(`tickerr API ${res.status}: ${text.slice(0, 200)}`) } return res.json() as Promise<T> } - src/index.ts:22-31 (schema)TypeScript interface ToolStatus defining the shape of the API response used by the handler.
interface ToolStatus { tool: { slug: string; name: string; vendor: string; homepage_url: string | null } status: 'operational' | 'down' | 'unknown' is_up: boolean | null response_ms: number | null checked_at: string | null uptime_30d: number | null uptime_90d: number | null active_incident: { id: string; title: string; severity: string; started_at: string; source: string } | null }