{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_sjkc9v2f798f","handle":"testlens","url":"https://wellknown.network/agents/testlens","links":{"self":"https://wellknown.network/agents/testlens/record.json","html":"https://wellknown.network/agents/testlens","markdown":"https://wellknown.network/agents/testlens/record.md","api":"https://wellknown.network/api/v1/agents/testlens","status":"https://wellknown.network/api/v1/agents/testlens/status","claim":"https://wellknown.network/agents/testlens/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/testlens/claim.json","badge":"https://wellknown.network/agents/testlens/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/testlens/history","tools":"https://wellknown.network/api/v1/agents/testlens/tools"},"ard":{"identifier":"urn:air:testlens.bigfloppy.net:server:testlens","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"TestLens","summary":"Paste code + tests, get a strong/weak verdict with killed/survived mutants. Free API + MCP.","description":"Paste code + tests, get a strong/weak verdict with killed/survived mutants. Free API + MCP.","publisher":{"name":"net.bigfloppy.testlens","url":null},"homepage":"https://testlens.bigfloppy.net/","repository":"https://github.com/wminno/testlens","version":"1.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://testlens.bigfloppy.net/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-25T14:48:37.570123Z","publishedAt":"2026-10-25T14:48:37.570123Z","registryName":"net.bigfloppy.testlens/testlens"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"code.testing","name":"Testing","confidence":0.54,"provenance":"derived"}],"categories":["code"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 7h ago.","lastOkAt":"2026-11-07T00:24:28.583Z","lastProbedAt":"2026-11-07T00:24:28.583Z","statusComputedAt":"2026-11-07T00:27:58.331Z","reliability30d":{"probes":32,"successRate":1,"p50Ms":4,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":32,"ok":32,"authBoundaryOk":0,"serviceOk":32,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-07T00:24:28.583Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":5,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-06T15:25:22.644Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":5,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-06T06:29:02.477Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":5,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-05T21:29:38.054Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":4,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-05T12:23:01.197Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":3,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-05T03:26:30.794Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":4,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-04T19:24:55.450Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":4,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-04T11:25:37.762Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":7,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-04T03:31:44.303Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":4,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-03T19:36:07.616Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":5,"error":null,"detail":{"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"toolCount":2,"toolsHash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","serverName":"testlens","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"testlens_mutate","description":"Mutation-test Python code: submit the module code and unittest test cases; TestLens generates small mutants (flipped comparisons, swapped operators, inverted bo"},{"name":"testlens_health","description":"Check the TestLens API is up. Takes no arguments."}],"package":null,"toolSurface":{"id":"ts_xvrmwypwhr9q","endpointId":"ep_vdr4p94dr9qp","hash":"d5f45a147658e34eca36287180b97c561d1f6ed2ee0e923d9d0f20ad8bf1e3f1","toolCount":2,"serverName":"testlens","serverVersion":"1.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-27T21:30:22.462Z","lastSeenAt":"2026-11-07T00:24:28.585Z","observations":32,"hiddenText":{"level":"none","total":0,"tools":0,"kinds":[],"findings":[]},"toolNames":["testlens_mutate","testlens_health"],"distinctSurfaces":1,"surfacesWithHiddenText":0},"endpointFacts":[{"id":"ep_vdr4p94dr9qp","url":"https://testlens.bigfloppy.net/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-11-05T21:29:38.125Z","auth":{"observedAt":"2026-11-05T21:29:38.186Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-11-05T21:29:38.204Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"testlens.bigfloppy.net","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-10-23T02:13:51.000Z","validTo":"2027-01-21T02:13:50.000Z","daysToExpiry":74,"sanCount":1,"fingerprint256":"FB:23:4F:DC:43:8C:A9:EA:3F:DA:A5:34:48:41:AF:43:EB:CE:49:87:18:81:21:06:29:4B:3A:8C:80:DE:7F:FA"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"net.bigfloppy.testlens/testlens","url":"https://registry.modelcontextprotocol.io/v0/servers/net.bigfloppy.testlens%2Ftestlens","firstSeenAt":"2026-10-27T20:18:35.453Z","fetchedAt":"2026-11-04T02:21:32.618Z","normalizedAt":"2026-11-04T02:21:32.618Z"}]},"firstSeenAt":"2026-10-27T20:18:35.453Z","updatedAt":"2026-11-07T00:29:08.375Z"}