{"serverId":"mcp-registry/io.github.kaitzyy-dev/readout","tools":[{"name":"base_image_check","fixed":{"name":"base_image_check","description":"For a container base image: its size, when it was last rebuilt, and whether the OS underneath it is still supported. Requires a key; see https://sighttrue.com/pricing.","inputSchema":{"type":"object","required":["image"],"properties":{"image":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":93,"tokensAfter":93},{"name":"check_before_install","fixed":{"name":"check_before_install","description":"Call this before adding a dependency. Returns only the facts a reviewer would be annoyed to discover afterwards: whether the publisher has withdrawn the package, whether it runs scripts on the installing machine, whether its repository is archived, how many advisories are on record, whether the licence is source-available, and how long since it was actually published. Each fact carries the address of the body that published it. It does not say whether to install; it says what is on record.","inputSchema":{"type":"object","required":["registry","name"],"properties":{"name":{"type":"string","description":"Package name as the registry spells it."},"registry":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":211,"tokensAfter":211},{"name":"check_eol","fixed":{"name":"check_eol","description":"Check whether a runtime, database or framework release is still receiving security fixes, and what to move to. Covers about two dozen products read daily from endoflife.date.","inputSchema":{"type":"object","required":["product"],"properties":{"cycle":{"type":"string","description":"Release line, e.g. 3.9 or 20. Omit for every cycle."},"product":{"type":"string","description":"Product as endoflife.date spells it, e.g. python, nodejs, postgresql."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"check_package","fixed":{"name":"check_package","description":"Read the current standing of one open-source package: downloads with the window they cover, OpenSSF scorecard, advisory count, licence, whether the repository is archived, and when it was last pushed to.","inputSchema":{"type":"object","required":["registry","name"],"properties":{"name":{"type":"string","description":"Package name as the registry spells it."},"registry":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":129,"tokensAfter":129},{"name":"check_provider","fixed":{"name":"check_provider","description":"Recorded incidents for a hosting or API provider over a window, kept after the provider’s own status page dropped them.","inputSchema":{"type":"object","required":[],"properties":{"days":{"type":"integer","maximum":730,"minimum":1},"provider":{"type":"string","description":"Provider slug, e.g. cloudflare, openai, github. Omit for every provider."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"check_stack","fixed":{"name":"check_stack","description":"Read a whole dependency list at once and report what is archived, what carries advisories, what has a source-available licence, and what has not been pushed to in a year. Use when reviewing a package.json, requirements.txt, Cargo.toml, composer.json or Gemfile.","inputSchema":{"type":"object","required":["registry","names"],"properties":{"names":{"type":"array","items":{"type":"string"}},"registry":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":136,"tokensAfter":136},{"name":"compare_repositories","fixed":{"name":"compare_repositories","description":"Hold two watched repositories against each other across downloads, OpenSSF scorecard, advisories, forks, stars and findings on record. Compares only; it does not pick a winner.","inputSchema":{"type":"object","required":["a","b"],"properties":{"a":{"type":"string","description":"Repository as owner/name."},"b":{"type":"string","description":"Repository as owner/name."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"explain_finding","fixed":{"name":"explain_finding","description":"Given a finding id, return what was measured, when, by whom, and the address it can be checked at. For an agent quoting a figure into a review. Requires a key; see https://sighttrue.com/pricing.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"find_model","fixed":{"name":"find_model","description":"Find language models by price and context window, from a catalogue read daily across sixty providers. Use this before choosing a model: prices move without announcement and training data is out of date on the day it ships.","inputSchema":{"type":"object","required":[],"properties":{"maxPrice":{"type":"number","description":"Maximum USD per million prompt tokens."},"provider":{"type":"string"},"minContext":{"type":"integer","description":"Minimum context window in tokens."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":152,"tokensAfter":152},{"name":"list_readings","fixed":{"name":"list_readings","description":"List every reading this server can return, what each one measures, and which require a key. Call this first if unsure which tool answers a question.","inputSchema":{"type":"object","required":[],"properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":78,"tokensAfter":78},{"name":"registry_health","fixed":{"name":"registry_health","description":"Recorded outages of the package registries themselves, kept after their status pages drop them. Requires a key; see https://sighttrue.com/pricing.","inputSchema":{"type":"object","required":[],"properties":{"registry":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":86,"tokensAfter":86},{"name":"runtime_deadlines","fixed":{"name":"runtime_deadlines","description":"Support end dates for the runtimes a dependency set requires, including any already past. Requires a key; see https://sighttrue.com/pricing.","inputSchema":{"type":"object","required":["names"],"properties":{"names":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":93,"tokensAfter":93},{"name":"search_repositories","fixed":{"name":"search_repositories","description":"Find watched repositories whose name contains a string, with their current readings. Use it to discover what is covered before calling the other tools.","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer","minimum":1},"query":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":100,"tokensAfter":100},{"name":"typosquat_check","fixed":{"name":"typosquat_check","description":"Whether a name is one edit away from a more widely installed package. States that both names exist; which one was meant is the caller’s call. Requires a key; see https://sighttrue.com/pricing.","inputSchema":{"type":"object","required":["registry","name"],"properties":{"name":{"type":"string","description":"Package name as the registry spells it."},"registry":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":126,"tokensAfter":126},{"name":"watch_add","fixed":{"name":"watch_add","description":"Add a package to the caller’s own private watchlist, so later readings are about their stack rather than the public one. The list is private to the key that created it. Requires a key; see https://sighttrue.com/pricing.","inputSchema":{"type":"object","required":["registry","name"],"properties":{"name":{"type":"string","description":"Package name as the registry spells it."},"registry":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":132,"tokensAfter":132},{"name":"who_can_publish","fixed":{"name":"who_can_publish","description":"How many accounts hold publish rights on a package, as the registry lists them. Answers who can put code on your machine, which is a different question from who writes it. Requires a key; see https://sighttrue.com/pricing.","inputSchema":{"type":"object","required":["registry","name"],"properties":{"name":{"type":"string","description":"Package name as the registry spells it."},"registry":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":134,"tokensAfter":134}],"toolsChanged":16,"tokensSaved":0,"todo":[{"tool":"advisory_severity","params":["registry"]},{"tool":"audit_manifest","params":["filename","manifest"]},{"tool":"base_image_check","params":["image"]},{"tool":"check_before_install","params":["registry"]},{"tool":"check_package","params":["registry"]},{"tool":"check_provider","params":["days"]},{"tool":"check_stack","params":["names","registry"]},{"tool":"diff_since","params":["names"]},{"tool":"domain_risk","params":["registry"]},{"tool":"explain_finding","params":["id"]},{"tool":"find_model","params":["provider"]},{"tool":"funding_gap","params":["limit"]},{"tool":"help_availability","params":["tag"]},{"tool":"model_price_history","params":["model"]},{"tool":"package_weight_history","params":["registry"]},{"tool":"provider_incidents","params":["provider"]},{"tool":"provider_terms_changed","params":["provider"]},{"tool":"provider_transparency","params":["provider"]},{"tool":"registry_health","params":["registry"]},{"tool":"runtime_deadlines","params":["names"]},{"tool":"search_repositories","params":["limit","query"]},{"tool":"time_to_fix","params":["registry"]},{"tool":"typosquat_check","params":["registry"]},{"tool":"watch_add","params":["registry"]},{"tool":"watch_changes","params":["since"]},{"tool":"who_can_publish","params":["registry"]},{"tool":"withdrawn_but_installed","params":["limit"]}],"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."}