{"name":"io.github.LufeMC/kaval","slug":"lufemc-kaval","title":"Kaval","description":"Verify the facts an agent's action depends on before it acts — ALLOW, REVIEW, or BLOCK.","url":"https://mcp.market/server/lufemc-kaval","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":27,"stars":0,"forks":0,"downloads_week":64,"last_push_at":"2026-09-10T23:36:42.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/LufeMC/kaval-clients","website":"https://usekaval.com","version":"0.7.1","remotes":[],"packages":[{"registryType":"npm","identifier":"@usekaval/mcp","version":"0.7.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"Bring-your-own Kaval bearer key (kv_live_…). Create one at https://usekaval.com.","isRequired":true,"isSecret":true,"name":"KAVAL_API_KEY"},{"description":"Point at a self-hosted or staging Kaval API instead of the hosted one. Defaults to https://api.usekaval.com.","name":"KAVAL_BASE_URL"}]}],"tools":[{"name":"add_source","description":"Tell Kaval what to watch, so later checks are answered from fresh state instead of live research. Registering the NAME of an authority is usually enough: {kind:'entity', name:'Aetna', intent:'payer policy bulletins'} resolves to the pages that publish it and watches them. Use kind:'url' for a specific page, kind:'push' for a document your own system will send in. Kaval polls watched sources adapti","write_action":false,"price_micros":0,"input_schema":null},{"name":"check","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_receipt","description":"Fetch the full signed receipt for a check you already ran, by the `receipt.id` that check returned. `check` gives you only the id, the signature, and when it was signed; this returns the document that was actually signed — every fact with its state and the evidence basis under it (source locator, content digest, fetch and publication time), the freshness failure if state could not be served, the d","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sources","description":"List what Kaval currently watches for this workspace — including sources it auto-registered after a check cited them. Each row shows the locator, what it was registered for, when it was last successfully fetched, and whether it is active. Use it to see whether the fact you care about is actually backed by a watched source (and therefore fast and monitored) before relying on a check being warm.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_source","description":"Stop watching a source and forget it, by the `id` `add_source` or `list_sources` returned. Removal is the only thing that frees registry capacity, and capacity is finite: a workspace watches a bounded number of ACTIVE sources, and every URL a check cites gets auto-registered against that same bound, so an agent that only ever adds eventually fills it — after which new citations are silently droppe","write_action":true,"price_micros":0,"input_schema":null},{"name":"report_outcome","description":"Report what actually happened after a prior check, using the receipt id it returned, so Kaval can calibrate. Use `relied_and_correct` when you acted on an ALLOW and it held; `current_later_contradicted` when an ALLOW turned out to be wrong; `stale_caught_real` when a REVIEW/BLOCK caught a genuine change; `stale_was_false_alarm` when it did not.","write_action":false,"price_micros":0,"input_schema":null},{"name":"verify","description":"DEPRECATED — prefer the `check` tool. Verifies one load-bearing conclusion against evidence references you supply and returns a signed ProofPacket receipt (status valid | invalidated | could_not_verify, receipt.decision ALLOW | REVIEW | BLOCK). Kept only for existing pilot integrations that pass explicit evidence_refs; it will be removed. New calls should use `check`, which needs no evidence list,","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-09-24T05:05:33.462Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-24T05:05:33.422Z","components":{"code":{"score":25,"max":25,"notes":["9 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 13 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@usekaval/mcp","version":"0.7.1","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-08-05T18:04:47.890Z","repositoryUrl":"git+https://github.com/LufeMC/kaval-clients.git","weeklyDownloads":64}],"repo":{"found":true,"owner":"LufeMC","repo":"kaval-clients","archived":false,"pushedAt":"2026-09-10T23:36:42Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/294004435?v=4","ownerCreatedAt":"2020-08-05T15:36:09Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/294004435?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":64,"license":"Apache-2.0","lastPushAt":"2026-09-10T23:36:42.000Z","score":27}}}},"grade_history":[],"reviews":[]}