{"audit":{"version":"1.5","generated_at":"2026-10-03T05:44:28.489600+00:00","generated_by":"Agenstry","report_url":"https://agenstry.com/agents/classificado.app.br","methodology_url":"https://agenstry.com/methodology","verifier_jwks_url":"https://agenstry.com/.well-known/jwks.json","subject":{"domain":"classificado.app.br","name":"Meta Agent Tools","url":"https://agentalog.com/.well-known/agent-card.json"}},"identity":{"provider":{"organization":"Meta Agent Tools","url":"https://agentalog.com"},"registry_verification":null,"signature":{"signed":false,"signature_valid":null}},"protocol":{"version":null,"supports_streaming":true,"supports_push_notifications":false},"operational":{"live_state":"live","live_responds":true,"last_status_code":200,"last_elapsed_ms":917,"last_error":null},"track_record":{"first_seen":"2026-09-30T23:33:08.384725+00:00","last_checked":"2026-10-03T03:59:11.157594+00:00","last_seen_ok":"2026-10-03T03:59:11.157594+00:00","checks_total":10,"checks_ok":10,"uptime_pct":100.0,"uptime_window_days":30,"uptime_probes":1,"archived":false,"archived_reason":null},"conformance":{"score":54,"grade":"D","summary":"D-grade: significant issues, auth-gated, partially broken, or stale.","criteria":[{"key":"valid_card","label":"Valid AgentCard","points":10,"max_points":10,"status":"pass","detail":"Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification)."},{"key":"live_responds","label":"Live JSON-RPC","points":25,"max_points":25,"status":"pass","detail":"Endpoint responds to a negotiated A2A SendMessage probe (answers in ~438 ms)."},{"key":"protocol_version","label":"Protocol version","points":0,"max_points":10,"status":"fail","detail":"No protocolVersion in card."},{"key":"signature","label":"JWS signature","points":0,"max_points":10,"status":"info","detail":"Card is unsigned (most published agents are)."},{"key":"uptime","label":"Uptime track record","points":0,"max_points":15,"status":"info","detail":"Only 1 probe so far, need ≥5 for an uptime grade."},{"key":"skills","label":"Skill declaration","points":10,"max_points":10,"status":"pass","detail":"Declares 24 skills with structured metadata. 24 skills without tags — optional in 0.x, REQUIRED once you move the card to v1.0."},{"key":"verified_identity","label":"Verified Identity","points":5,"max_points":10,"status":"partial","detail":"Provider declared: Meta Agent Tools (https://agentalog.com). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit."},{"key":"freshness","label":"Freshness + modern flags","points":4,"max_points":5,"status":"pass","detail":"seen in upstream source within 0d"},{"key":"security","label":"Security declaration","points":0,"max_points":5,"status":"info","detail":"Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated."}]},"card_read":{"findings":[],"clean":true,"source_url":"https://classificado.app.br/.well-known/agent-card.json"},"skills":[{"id":"search_bundles","name":"search_bundles","description":"Search the index of OKF bundles: free text over name, tagline, description and origin; filter by provenance (github|domain), repository, version, language, license, root type or concept count; search root concept text. Paginate with limit/offset. Only `live` bundles. Free text matches the name, the tagline, the description and the origin identifier (`owner/repo:path` or the bundle URL). No `total` on purpose: `GET /api/okf/stats` has it.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/bundles"},{"id":"get_bundle","name":"get_bundle","description":"One bundle's card: root index.md URL, version, concept count, provenance and repository signal. `live` and `low` (example or fixture bundles kept out of the search) both answer here.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/bundles/:id"},{"id":"index_stats","name":"index_stats","description":"Size of the index by provenance and when it last changed.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/okf/stats"},{"id":"feed_find","name":"feed_find","description":"Does this site publish a feed? Answers with every feed known for a domain — the question a reader or an agent actually asks. Find feeds by text, format, language and availability. Filter and text search run in the SAME full-text query: values inside one parameter are OR'd, different parameters are AND'd. Without `q` the order is by newest in the index (`recentes`) and `next_cursor` is a keyset — follow `next` to walk everything. With `q` the order is relevance and paging is by `offset`. We index and link; the feeds belong to whoever publishes them.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/feeds"},{"id":"feed_posts","name":"feed_posts","description":"What has this feed published? The posts of one feed as our queue read them — title, date, author, summary, categories and enclosure, without the body. Find the feed first (feed_find or feed_search); this takes an id from this index, never a URL. Up to 40 posts, in the order the feed publishes them, WITHOUT the body — the body of one post comes from `/items/:ord`. It is OUR copy, read on our own schedule — not the live feed and not a proxy: the only thing this endpoint accepts is an id from this index, never a URL. `lido_em` says when we read it. Empty list when the feed has not been read yet.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/feeds/:id/items"},{"id":"feed_post","name":"feed_post","description":"Read one post whole: the body in Markdown (`conteudo`) and the author's formatting as safe HTML (`conteudo_html`), plus the link to the original. `ord` comes from feed_posts; 0 is the newest. Two bodies for the same post, both from the copy we stored when we READ the feed — a request never fetches the site: `conteudo_html` keeps the author's formatting through an allowlist (only known tags and attributes survive; script, style, iframe and event handlers are dropped with their content), and `conteudo` is the same text as Markdown — the shape an agent usually wants. Neither can carry script. 404 when the feed or the position is unknown.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/feeds/:id/items/:ord"},{"id":"feed_search","name":"feed_search","description":"Search the feed index by text and filters: format, audio/video, community, namespace and year of the newest item. Find feeds by text, format, language and availability. Filter and text search run in the SAME full-text query: values inside one parameter are OR'd, different parameters are AND'd. Without `q` the order is by newest in the index (`recentes`) and `next_cursor` is a keyset — follow `next` to walk everything. With `q` the order is relevance and paging is by `offset`. We index and link; the feeds belong to whoever publishes them.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/feeds"},{"id":"mcp_index_signals","name":"mcp_index_signals","description":"Does this MCP server still answer, with which access, and is its repository alive? What independent MCP indexes measured about one listing of this catalog, each credited with its license. Take the id from list_listings. A signal belongs to a listing only when it is the SAME object: the name in the official MCP registry, the exact remote endpoint URL or the GitHub `owner/repo`, in that order. A shared domain never matches — two servers on one host are different products. Up to 20 signals, one per index and record.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/indices/sinais"},{"id":"mcp_index_search","name":"mcp_index_search","description":"Browse what independent MCP indexes measured, including servers this catalog does not list yet (casou=0). Newest change first. `casou=0` is what the indexes know and the catalog does not — the list to look at before submitting a server. Filters are AND'd.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/indices/itens"},{"id":"a2a_agent_search","name":"a2a_agent_search","description":"Find A2A agents — agents that publish an AgentCard — by text, health, protocol version, registry, skill tag or publisher. Each row carries the key for a2a_agent and the license of every registry that lists it. Collected from public A2A registries and served as it comes — no review queue hides a record; quality is the order, never visibility. One row per agent, merged across the registries that list it: `fontes` says which, and `creditos` carries each one's license, which travels with the data. Values inside one parameter are OR'd, different parameters are AND'd. Cached for 60 seconds. A MAT catalog read, served by the index host `https://api.agentalog.com`; this host forwards the call there.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/a2a/agents"},{"id":"a2a_agent","name":"a2a_agent","description":"Read one A2A agent: every skill its card declares, capabilities, protocol version, health, documentation and the registries that list it, with their licenses. Take the key from a2a_agent_search. The same row as the list plus what the card declares: every skill, the `capabilities` object, the protocol version as written, the documentation and icon URLs, and when we first saw it. Cached for 60 seconds; a MAT catalog read, like the list.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/a2a/agents/:chave"},{"id":"briefings_topics","name":"briefings_topics","description":"Which engineering topics have curated briefings, how many links each has and the newest links across all of them. Each link comes with its source, source type and a two-line summary. Topics are public bookmark folders (CUDA, inference, RAG, agents…). Each item is a post someone saved, its main source, the source type and a two-line summary in English and Portuguese. `?resumo=1` returns only `total` and each topic's `slug` and `total`. 404 until the first publication.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/briefings"},{"id":"briefings_links","name":"briefings_links","description":"Curated engineering links filtered by topic and source type (paper, repo, model, dataset, demo, video, docs, article, post), 20 per page, with the count of each filter value. Values inside one parameter are OR'd; the two parameters are AND'd. Unknown values are ignored. Follow `_links.next` to walk everything.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/briefings/itens"},{"id":"api_index","name":"api_index","description":"Self-describing index: the whole API surface, with quota and quickstart.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/"},{"id":"health","name":"health","description":"Liveness and the commit deployed right now — it is how the smoke waits for its own deploy.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/health"},{"id":"create_guest","name":"create_guest","description":"Creates a guest mr_… Asks for no e-mail. Publishing a listing is what requires an account (or a payment). At most 20 new guests per network per hour; a browser that already has one gets it back from the `mr_guest` cookie.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"POST /api/guest"},{"id":"list_listings","name":"list_listings","description":"Public mosaic of live MCP servers, skills, plugins and OKF knowledge bundles. `live` listings first and the `low` tail (few stars or no clear license) after them in every order — `low=0` leaves the tail out. To walk everything, follow `next`: without `q` it is a cursor (`next_cursor`, keyset on the order's index) and has no ceiling; every listing also has an HTML page at `/l/:id` and the shards of `/sitemap-listings.xml` list them all. `q` runs on a full-text index (FTS5, bm25) kept in the same transaction as every text write. With `q` and `low=0`, `low_count` says how many `low` listings the filter left out — LIKE with a cap of 200. The query is mapped onto kind/topic/transport filters unless `interpret=0`.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/listings"},{"id":"list_mcp_servers","name":"list_mcp_servers","description":"MCP subregistry (GET /v0.1/servers). Only live kind=mcp. Only `kind=mcp` and only `live`. It is the route a generic MCP client knows how to read without knowing this product. `GET /v0/servers` is an alias of the same resource, kept for whoever already pointed there — this is the canonical URL.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /v0.1/servers"},{"id":"get_listing","name":"get_listing","description":"One listing's page. The owner sees their own even when pending or hidden.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/listings/:id"},{"id":"get_listing_readme","name":"get_listing_readme","description":"README collected for a listing (R2). Only when get_listing carries readme_api; 404 when none was stored. The text lives in R2 (`mural-coleta`). This call does not write and does not fetch GitHub. Same visibility as the listing page. Call it only when the listing page carries `readme_api`: a page without it has no README collected, and this route answers 404.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/listings/:id/readme"},{"id":"listing_history","name":"listing_history","description":"Timeline of the listing's repository: last events (abandono = no push for 12 months, sumiu, renomeado, readme_mudou, manifesto_mudou), newest first; empty when nothing changed since the series began. The listing page carries the same list as `historico`; updates may be cached for up to 15 minutes. An empty list means no change since the series began — the listing still exists. Stale means no push for 12 months. Reading this endpoint does not refresh the record.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/listings/:id/history"},{"id":"go_listing","name":"go_listing","description":"302 hop to the listing's origin (counts a visit). Counts at most 1 visit per owner per day. The `X-Visit-Counted` header says whether this call counted — it is how the client knows without counting twice.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/go/:id"},{"id":"like_listing","name":"like_listing","description":"Likes the listing; DELETE undoes it. Calling again does not add up: the counter counts people.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"POST /api/listings/:id/like"},{"id":"list_comments","name":"list_comments","description":"Comments on a live listing. With a credential on the call, each comment of yours comes with `mine: true`.","tags":[],"examples":[],"inputModes":[],"outputModes":[],"endpoint":"GET /api/listings/:id/comments"}],"provenance":[{"source":"cdp_discovery","first_seen":"2026-09-30T23:33:08.384725+00:00"},{"source":"recrawl_warm","first_seen":"2026-10-03T03:59:11.157594+00:00"}],"recent_probes":[{"fetched_at":"2026-10-03T03:59:11.157594+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":917,"live_responds":true}],"catalog_attestation":null,"operator_revenue_evidence":{"evidence_class":"operator_submitted","authenticity":{"rung":"no_operator_evidence","rank":0,"why":"No verifiable operator evidence has been submitted for this agent.","thresholds":{"min_independent_payers":3,"min_verified_usd":25.0},"engine_table":"agent_authenticity","merge_rule":"max(existing_rank, rank)"},"metric_metadata":{"provenance":"operator_submitted_evidence","confidence":"attested","coverage":{"numerator":0},"as_of":"2026-10-03T05:44:28.944850+00:00","definition":"Revenue proofs submitted by the verified owner and re-checked by Agenstry against the settlement chain or the operator's own Stripe account. Only independently confirmed proofs are counted."},"counts":{"retained":0,"verified":0,"unverifiable":0},"verified":{"gross_usd":0.0,"transactions":0,"independent_payers":0},"detail_url":"https://agenstry.com/api/agents/classificado.app.br/evidence","dispute_url":"https://agenstry.com/agents/classificado.app.br/dispute"},"verification_history":[]}