{"serverId":"mcp-registry/ai.eosl/eosl","tools":[{"name":"bulk_check","fixed":{"name":"bulk_check","description":"Check up to 200 part numbers in one call (read-only, no auth; for a single part use lookup_part). Returns a per-part row (status, EOSL date, source URL, page URL) plus summary counts: past, endingSoon, supported, active, notFound. Never partial and never destructive: unknown or malformed entries do not fail the call, each simply returns found:false in its row.","inputSchema":{"type":"object","required":["part_numbers"],"properties":{"part_numbers":{"type":"array","items":{"type":"string"},"maxItems":200,"minItems":1,"description":"Part numbers to check; max 200 after case-insensitive deduplication. Punctuation differences (dashes, dots, spaces) are tolerated by the matcher, so raw inventory strings are fine."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":211,"tokensAfter":211},{"name":"get_family","fixed":{"name":"get_family","description":"Fetch the full source-backed record for one product family by slug (from search_models or lookup_part pageUrl): lifecycle dates per SKU group, every part number, support runway score factors, and the vendor bulletin URLs. Read-only; an unknown slug returns found:false with a hint, never an error.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","description":"Family slug, e.g. \"cisco-catalyst-3850\"."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":135,"tokensAfter":135},{"name":"list_vendors","fixed":{"name":"list_vendors","description":"List all vendors tracked by EOSL.ai with family counts and vendor page URLs. Read-only, no parameters. Use this first to check whether a vendor is covered at all; for specific models use search_models, for a part number use lookup_part.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":90,"tokensAfter":90},{"name":"lookup_part","fixed":{"name":"lookup_part","description":"Look up one hardware part number or model name in the EOSL.ai database (read-only, no auth; for many parts use bulk_check). Returns support status, End-of-Sale and End-of-Service-Life dates, support runway score, and the primary vendor bulletin URL backing the dates. Matching is exact, then punctuation-insensitive, then Fortinet short-SKU aliases (FG-60E -> FortiGate-60E); a model/family name (e.g. \"7010TX-48\") that matches no SKU returns the family-level record, flagged matchedVia:family-name. ","inputSchema":{"type":"object","required":["part_number"],"properties":{"vendor":{"type":"string","description":"Optional vendor, e.g. \"Cisco\". A tracked vendor restricts the match to that vendor (a part tracked under another vendor returns found:false naming that vendor). A string that is not a tracked vendor is ignored and reported back as vendorHint."},"part_number":{"type":"string","description":"Vendor part number / SKU, e.g. \"WS-C3850-48P-S\" or \"FG-100F\"."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":283,"tokensAfter":283},{"name":"search_models","fixed":{"name":"search_models","description":"Search tracked product families by vendor, product line, or series name (case-insensitive substring, e.g. \"nexus 9300\"). Read-only. Returns up to 10 families with status, EOSL window, and page URL. Use this for discovery when you have a name; for an exact part number use lookup_part, and use get_family with a returned slug for the full record.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","maxLength":120,"minLength":1,"description":"Search text, 1-120 characters."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":156,"tokensAfter":156}],"toolsChanged":5,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}